无超级权限时,如何从Postgres网络数据库导出表至本地?
非超级用户导出Postgres远程表为CSV的命令行方法
你遇到的COPY命令报错是因为它是服务器端操作,需要超级用户或pg_write_server_files角色权限才能写入服务器本地文件。而psql提供的\copy是客户端命令,无需服务器端权限,可直接将数据导出到本地文件,具体操作如下:
方法1:交互式执行
- 先通过命令行连接远程数据库:
psql postgresql://login:password@192.168.00.00:5432/test_db
注:连接地址末尾的test_table应为数据库名,若你写错了请替换为实际数据库名称
- 进入psql交互环境后,执行导出命令:
\copy test_table TO 'C:\tmp\test_table.csv' WITH (FORMAT CSV, HEADER, DELIMITER ',');
方法2:单命令直接执行
无需进入交互模式,直接在终端执行以下命令完成导出:
psql postgresql://login:password@192.168.00.00:5432/test_db -c "\copy test_table TO 'C:\tmp\test_table.csv' WITH (FORMAT CSV, HEADER, DELIMITER ',');"
注意事项
- 确保本地路径
C:\tmp已存在,若不存在请先创建;如果是Linux/macOS系统,路径需改为'/tmp/test_table.csv' - 若只需导出表中部分数据,可在
\copy后添加条件,例如:\copy (SELECT * FROM test_table WHERE id < 100) TO '...' ...
内容的提问来源于stack exchange,提问作者piolvi
相关产品推荐
相关产品推荐

