postgresql - 如何使用游标或 select 语句生成多个 DML 语句

postgresql - how to use a cursor or select statement to generate mulitple DML statements

刚接触 postgres,我正在使用 Postgresql 9.3。有没有办法用 postgresql 生成一个包含多个 DML 语句的文件?

例如,我想 select table name where tablename like '_foo%' 然后将所有这些 table 重命名为 '_bar%'.我需要在 cursor 中执行此操作还是可以在 select 语句 中执行此操作? (就像在 Oracle 中一样)

ALTER TABLE RENAME tst1_foo TO tst1_bar;
ALTER TABLE RENAME tst2_foo TO tst2_bar;
ALTER TABLE RENAME tst3_foo TO tst3_bar; 

我想将它们打印到 .sql 文件中。

如果可能,请提供一个基本示例。谢谢

您可以使用 psql 和 pg_tables 系统视图。将输出设置为未对齐模式:

\a

将输出设置为仅显示行:

\t on

将输出发送到您的文件:

\o yourfile.sql

运行查询:

SELECT 'ALTER TABLE RENAME ' || tablename || ' TO ' ||
  REGEXP_REPLACE ( tablename, '_foo$', '_bar' ) || ';'
FROM pg_tables
WHERE tablename LIKE '%_foo';

关闭文件:

\o

and/or 关闭 psql:

\q