جملة RETURNING تتيح لتعليمات INSERT و UPDATE و DELETE إرجاع البيانات حول الصفوف التي أثرت عليها — الأكثر شيوعًا هو المعرف المُنشأ تلقائيًا بعد الإدراج، لكن أيضًا أي أعمدة أو قيم محسوبة. إنها توفر استعلامًا منفصلًا وهي ميزة PostgreSQL مريحة.
جملة RETURNING تتيح لتعليمات INSERT و UPDATE و DELETE إرجاع البيانات حول الصفوف التي أثرت عليها — الأكثر شيوعًا هو المعرف المُنشأ تلقائيًا بعد الإدراج، لكن أيضًا أي أعمدة أو قيم محسوبة. إنها توفر استعلامًا منفصلًا وهي ميزة PostgreSQL مريحة.
-- get the auto-generated id back from the insert (no separate SELECT needed)
INSERT INTO users (name, email) VALUES ('Ann', '[email protected]')
RETURNING id; -- returns the new id
-- return multiple columns or all of them
INSERT INTO users (name) VALUES ('Bob')
RETURNING id, name, created_at; -- including DB-generated values
INSERT INTO users (name) VALUES ('Carol') RETURNING *; -- the whole row
الاستخدام الأكثر شيوعًا: بعد الإدراج، عادةً ما تحتاج إلى مفتاح أساسي مُنشأ (للاستخدام في عمليات إدراج مرتبطة أو للعودة إلى العميل). RETURNING id يعطيك إياه مباشرة — لا حاجة لاستعلام منفصل.
-- see what was updated
UPDATE products SET price = price * 1.1 WHERE category = 'books'
RETURNING id, name, price; -- the NEW values after the update
-- capture deleted rows (e.g. for archiving/logging)
DELETE FROM sessions WHERE expired = true
RETURNING id, user_id; -- which rows were deleted
RETURNING يعمل على UPDATE (انظر القيم الجديدة) و DELETE (التقط ما تم حذفه — مفيد للأرشفة أو التأكيد).
Without RETURNING:
INSERT ...; then a separate SELECT to get the id → TWO round-trips, and a potential
race (the SELECT might not reliably get YOUR row).
With RETURNING:
one statement returns the affected data atomically → fewer round-trips, no race.
-- use a CTE with RETURNING to insert and use the id in the same statement
WITH new_user AS (
INSERT INTO users (name) VALUES ('Ann') RETURNING id
)
INSERT INTO profiles (user_id, bio)
SELECT id, 'Hello' FROM new_user; -- use the returned id directly
jملة RETURNING ميزة PostgreSQL مريحة وكثيرة الاستخدام وقيّمة للكفاءة والصحة عند تعديل البيانات.
أهم واستخدام الأكثر شيوعًا لها هو الحصول على معرف مُنشأ تلقائيًا من INSERT — وهو احتياج عام (تريد دائمًا تقريبًا المفتاح الأساسي الجديد بعد الإدراج، لاستخدامه في عمليات مرتبطة أو للعودة إلى التطبيق)، و RETURNING id يوفره مباشرة في تعليمة واحدة.
بدون RETURNING، ستحتاج إلى SELECT منفصل للحصول على معرف مُنشأ، مما يعني جولة ذهابية إضافية و حالة تسابق محتملة (قد لا يستطيع SELECT المنفصل استرجاع صفك المحدد بشكل موثوق في سيناريوهات متزامنة)، لذا RETURNING أكثر كفاءة وأكثر صحة.
بعيدًا عن الإدراجات، RETURNING يعمل مع UPDATE (رؤية القيم الجديدة بعد تحديث) و DELETE (التقط ما تم حذفه — مفيد للأرشفة أو التسجيل أو تأكيد الحذف).
مع CTEs، يمكنه تفعيل أنماط قوية مثل الإدراج في جداول مرتبطة باستخدام المعرف المُعاد في تعليمة واحدة.
بما أن الحصول على قيم مُنشأة (خاصة المعرفات) بعد تعديلات البيانات احتياج ثابت، وبما أن RETURNING يوفره بكفاءة وذرية (تجنب استعلامات إضافية وحالات تسابق)، فإن فهم جملة RETURNING معرفة PostgreSQL قيّمة وكثيرة التطبيق تجعل كود تعديل البيانات أنظف وأكثر كفاءة وأكثر صحة — مريحة عملية تُستخدم بانتظام في تطبيقات حقيقية تعمل مع Postgres، خاصة للحاجة الواسعة الانتشار لاسترجاع المعرفات المُنشأة بعد الإدراجات.