我有一个分区表,其中数据仅驻留在子表中。主表有一个插入触发器,可以将插入的数据分配到适当的子表中。
现在,我需要创建一个 PL/pgSQL 过程,该过程从(主)表中选择一些数据并使用一些更改的值重新插入它。
通常我会使用ROW_COUNT诊断变量并完成它。问题是 ROW_COUNT 始终为 0,因为主表中没有插入任何内容(触发器在途中捕获并重定向插入)。
我的下一个想法是做类似的事情
WITH inserted AS (
INSERT INTO master (...) SELECT ... FROM master WHERE ... RETURNING master.field
) SELECT count(*) FROM inserted INTO rowcount;
Run Code Online (Sandbox Code Playgroud)
但是,再次,rowcount 总是最终为 0,因为没有实际插入到主表中。
如果我做
WITH insertable AS (
SELECT ... FROM master WHERE ...
), blah AS (
SELECT count(*) INTO rowcount FROM insertable
) INSERT INTO master SELECT * FROM insertable;
Run Code Online (Sandbox Code Playgroud)
然后 Postgresql 抱怨说:
错误:INTO 与无法返回数据的命令一起使用
SQL 状态:42601
等等...
如果是我最后的代码提取,我如何将行数inserted放入rowcount我的程序中的变量中,然后我可以用它来做东西 …