Postgresql
PostgreSQL 更新表然後插入另一個表
我有一張
User
桌子和一張Log
桌子。我需要更新表格上的一個欄位並在記錄更新User
的表格上插入一個新條目。Log
我已經寫了更新聲明:UPDATE users SET free_shipping_until = spu.created_at::date + interval '1 year' FROM shipping_priority_users AS spu WHERE spu.role_id = #{role.id} and users.id = spu.user_id and spu.created_at is not null;
Log
對於每個更新,我還需要在具有以下列的表上添加(可能在事務中)插入語句user_id: string, created_at: timestamp data: jsonb
- 數據列包含一個 jsonb 值,其中包括
free_shipping_until
來自更新的值。data: {"free_shipping_until": [null, "2021-07-30"]}
user_id
應該匹配更新記錄的值- 該
created_at
列是目前時間,我正在使用 RoR 並且可以使用預期格式插入值。我正在使用 PostgreSQL 12.3
您可以使用數據修改 CTE在單個語句中執行此操作:
with changed_user as ( UPDATE users SET free_shipping_until = spu.created_at::date + interval '1 year' FROM shipping_priority_users AS spu WHERE spu.role_id = #{role.id} and users.id = spu.user_id and spu.created_at is not null returning * ) insert into log (user_id, created_at, data) select id, current_timestamp, jsonb_build_object('free_shipping_until', array[null, free_shipping_until::text]) from changed_user;
來自更改使用者