vmb*_*vmb 25 sql postgresql postgresql-9.1
我想备份我的postgres数据库中的所有函数.如何只在Postgres中备份函数?
Cra*_*ger 54
使用pg_getfunctiondef; 查看系统信息功能.pg_getfunctiondef在PostgreSQL 8.4中添加了.
SELECT pg_get_functiondef('proc_name'::regproc);
Run Code Online (Sandbox Code Playgroud)
要转储模式中的所有函数,可以查询系统表pg_catalog; 如果您想要一切来自public:
SELECT pg_get_functiondef(f.oid)
FROM pg_catalog.pg_proc f
INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
WHERE n.nspname = 'public';
Run Code Online (Sandbox Code Playgroud)
将上述内容更改为"从所有模式开始,除了那些开头的pg_",如果这就是你想要的那样,这是微不足道的.
在psql你可以转储这与文件:
psql -At dbname > /path/to/output/file.sql <<"__END__"
... the above SQL ...
__END__
Run Code Online (Sandbox Code Playgroud)
要在另一个DB中运行输出,请使用以下内容:
psql -1 -v ON_ERROR_STOP -f /path/to/output/file.sql target_db_name
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在这样的DB之间复制函数,请考虑将函数定义的authorative副本作为SQL脚本存储在修订控制系统(如svn或git)中,最好打包为PostgreSQL扩展.请参阅包装扩展.
dez*_*zso 29
你不能告诉pg_dump只转储功能.但是,您可以在没有data(-s)的情况下进行转储,并在还原时对其进行过滤.注意-Fc部分:这将产生适合的文件pg_restore.
首先采取转储:
pg_dump -U username -Fc -s -f dump_test your_database
Run Code Online (Sandbox Code Playgroud)
然后创建一个函数列表:
pg_restore -l dump_test | grep FUNCTION > function_list
Run Code Online (Sandbox Code Playgroud)
最后恢复它们(-L指定上面创建的列表文件):
pg_restore -U username -d your_other_database -L function_list dump_test
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33705 次 |
| 最近记录: |