我正在尝试将bytea
数据从一个表移动到另一个表,更新一个查询中的引用。
因此,我想从用于插入的查询中返回未用于插入的数据。
INSERT INTO file_data (data)
select image from task_log where image is not null
RETURNING id as file_data_id, task_log.id as task_log_id
但我收到该查询的错误:
[42P01] ERROR: missing FROM-clause entry for table "task_log"
我想做类似的事情:
WITH inserted AS (
INSERT INTO file_data (data)
SELECT image FROM task_log WHERE image IS NOT NULL
RETURNING id AS file_data_id, task_log.id AS task_log_id
)
UPDATE task_log
SET task_log.attachment_id = inserted.file_data_id,
task_log.attachment_type = 'INLINE_IMAGE'
FROM inserted
WHERE inserted.task_log_id = task_log.id;
但是我无法获取用于插入的所有数据,我无法从子选择中返回 id。
这个答案启发了我如何使用Common Table Expressions做到这一点,但我找不到让它工作的方法。