![](/img/trans.png)
[英]How to open a postgres database created using psql in PgAdmin4?
[英]How to Generate Scripts For All Triggers and tables in Database Using pgAdmin4
我想生成一个 SQL 脚本,其中包含用于创建我们数据库中存在的所有触发器和表的 SQL。 我已经尝试过右键单击表格,选择script -> create Scripts
。 虽然这确实为该表创建了一个 SQL 脚本,但它并没有为该表的触发器函数创建一个脚本。 我该怎么办?
我也试过:
SELECT tgrelid::regclass
, tgname
, pg_get_triggerdef(oid)
, pg_get_functiondef(tgfoid)
FROM pg_trigger
WHERE tgrelid = 'public.tablename'::regclass;
但它没有用,因为它创建了一个 CSV 文件。
pg_dump
可能是这里的最佳选择,因为它是与 Postgres 捆绑在一起的导出工具,旨在(或多或少)做到这一点。 您指定的要求的唯一问题是它特别要求某些对象类型(我在这里假设这是一个严格的要求)。
pg_dump
确实有-s (--schema-only)
标志,它将转储所有对象(不仅仅是表和触发器)的所有create
语句。 所以我想有两种选择:
pg_dump
的脚本,并且只预选触发器和表。 让脚本使用psql
查询 Postgres 系统表以获取所有table
和trigger
对象的名称。 然后将该列表输入pg_dump
以单独导出每个对象。 选项 2 听起来容易得多,但也更慢,因为我认为触发器可能需要一个一个地完成(可以使用pg_dump
的-t (--table=TABLE)
选项批量完成-t (--table=TABLE)
)。 但是由于它只是转储模式对象而没有数据,所以它可能不会产生很大的不同。
您可以像这样挑选触发器:
pg_dump -s -Fc | pg_restore --trigger='my_trigger'
这可以包含在一个脚本中:
#!/bin/bash
my_db='db_name'
triggers=($(psql --dbname="${my_db}" -A -R ', ' -t \
-c 'select tgname from pg_trigger'))
for trigger in "${triggers[@]}"; do
pg_dump -s -Fc | pg_restore --trigger="$trigger"
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.