PostgreSQL:如何将自定义函数从一个数据库复制/导入到另一个数据库
如何在PostgreSQL之间复制plpgsql函数
当然可以!针对你在Windows 10上使用PostgreSQL 9.5.12的场景,有几种简单可靠的方法能把my_db里的my_func()复制到另一个数据库:
方法1:用pg_dump命令行导出导入(推荐)
这是最通用的命令行方式,适合批量或自动化操作:
导出函数:打开Windows的命令提示符(CMD)或PowerShell,执行以下命令(替换成你的实际用户名):
pg_dump -U your_username -d my_db -n public -t my_func -f my_func.sql解释下参数:
-U:指定PostgreSQL用户名-d:源数据库名(这里是my_db)-n:函数所在的模式(默认是public,如果你的函数在其他模式请修改)-t:指定要导出的函数(pg_dump会识别函数对象)-f:导出的SQL文件名
导入到目标数据库:同样在命令行执行:
psql -U target_username -d target_db -f my_func.sql如果目标库已经存在同名函数,记得先删除(要匹配函数的完整参数签名,避免误删重载函数):
DROP FUNCTION IF EXISTS my_func(); -- 替换成你的函数实际参数,比如my_func(int, text)
方法2:直接提取函数定义手动执行
如果只需要复制单个函数,这个方法更快捷:
- 打开psql连接到源数据库,执行:
这个命令会输出\sf my_funcmy_func()的完整CREATE FUNCTION语句,包含所有plpgsql代码和参数定义。 - 把这段SQL复制下来,在目标数据库的psql或pgAdmin中执行即可。
如果你用pgAdmin图形界面,找到源库的my_func,右键选择「CREATE Script」,复制脚本后到目标库执行。
方法3:pgAdmin图形化备份恢复
适合偏好可视化操作的用户:
- 打开pgAdmin,连接到源服务器,找到
my_db→ 「Functions」 → 右键点击my_func→ 选择「Backup...」 - 备份格式选择「Plain」,设置好保存路径后完成备份
- 连接到目标服务器,打开目标数据库 → 右键选择「Restore...」,选择刚才备份的SQL文件,点击「Restore」完成导入
注意事项
- 确保
my_func()依赖的所有对象(比如自定义类型、关联表、其他函数)在目标数据库中已经存在,否则导入会报错 - 操作时要有足够权限:导出需要源函数的读取权限,导入需要目标库的创建函数权限
- 如果需要保持函数所有者一致,导入后可以执行:
ALTER FUNCTION my_func() OWNER TO desired_owner;
内容的提问来源于stack exchange,提问作者khajlk
相关产品推荐
相关产品推荐

