我需要将一个大文件批量加载到 PostgreSQL 中。我通常会使用 COPY 命令,但是这个文件需要从远程客户端机器上加载。使用 MSSQL,我可以安装本地工具并在客户端使用 bcp.exe 连接到服务器。
PostgreSQL有等效的方法吗?如果不是,如果我不能先将文件复制到服务器,那么从客户端机器加载大文件的推荐方法是什么?
谢谢。
我需要将一个大文件批量加载到 PostgreSQL 中。我通常会使用 COPY 命令,但是这个文件需要从远程客户端机器上加载。使用 MSSQL,我可以安装本地工具并在客户端使用 bcp.exe 连接到服务器。
PostgreSQL有等效的方法吗?如果不是,如果我不能先将文件复制到服务器,那么从客户端机器加载大文件的推荐方法是什么?
谢谢。
COPY
PostgreSQL 协议 v3.0(Postgresql 7.4 或更高版本)支持命令。
您唯一需要COPY
从远程客户端使用的是启用了libpq的客户端,例如psql
命令行实用程序。
从远程客户端运行:
$ psql -d dbname -h 192.168.1.1 -U uname < yourbigscript.sql
您可以使用\copy
psql 工具中的命令,例如:
psql -h IP_REMOTE_POSTGRESQL -d DATABASE -U USER_WITH_RIGHTS -c "\copy
TABLE(FIELD_LIST_SEPARATE_BY_COMMA) from 'FILE_IN_CLIENT_MACHINE(MAYBE IN THE SAME
DIRECTORY)' with csv header"
假设您有某种客户端来运行查询,您可以使用 COPY 命令的 COPY FROM STDIN 形式: http ://www.postgresql.org/docs/current/static/sql-copy.html
使用psql
'\copy
命令在 sql 中加载数据:
$ psql -h <IP> -p <port> -U <username> -d <database>
database# \copy schema.tablename from '/home/localdir/bulkdir/file.txt' delimiter as '|'
database# \copy schema.tablename from '/home/localdir/bulkdir/file.txt' with csv header