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
刚接触 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