برنامه نویسی
به روز رسانی بازگشت قدیمی | جدید در YugabyteDB و PostgreSQL

ایده خوبی است که بهجای تراکنش دو بیانیه با UPDATE و SELECT، UPDATE … RETURNING را ترجیح دهید. به طور پیش فرض، مقدار جدید برگردانده می شود. Oracle 23c امکان بازگرداندن مقادیر قدیمی را اضافه کرده است.
در اینجا نحوه انجام همین کار در YugabyteDB و PostgreSQL آمده است.
yugabyte=# create table demo (id bigint primary key, value text);
CREATE TABLE
yugabyte=# insert into demo
select generate_series(1,50), '...old...';
INSERT 0 50
yugabyte=# update demo set value='...new...' where id=42
returning id, value;
id | value
----+-----------
42 | ...new...
(1 row)
UPDATE 1
در اینجا نحوه اجرای مشابه برای برگرداندن مقادیر قدیمی و جدید است:
yugabyte=# with old as (select * from demo where id=42)
update demo new set value='...new...'
from old where old.id=new.id
returning new.id, old.value, new.value ;
id | old_value | new_value
----+-----------+-----------
42 | ...old... | ...new...
(1 row)
UPDATE 1
عبارت WITH (که CTE برای بیان جدول مشترک نیز نامیده می شود) برای انجام چندین عملیات خواندن و نوشتن در یک دستور بسیار مفید است. مزیت اعلان منطق در یک دستور SQL، آن را کارآمدتر و مقیاسپذیرتر با کاهش رفت و برگشت، افزایش احتمال تکرار شفاف (مثلاً در شیب ساعت) و اجتناب از ناهنجاریها حتی در سطح جداسازی متعهد خواندنی میکند.