我有一个PostgreSQL备份与PHPPgadmin使用导出〉复制(而不是复制〉SQL,这实际上是我需要的)。文件包含如下条目:
COPY tablename(id, field) FROM stdin; ...
如何将此文件转换为SQL格式?
INSERT INTO tablename...
我想使用Pgadmin来导入此文件使用执行SQL命令。
qyzbxkaa1#
我不知道有什么方法或工具可以将"COPY"转换为"INSERT"语句。但是使用"pg_dump"命令行工具,你可以用"INSERT"而不是"COPY"语句创建一个DB转储文件。简单地使用"--column-inserts"参数(可以是"--inserts")。
你可以做的是:1.在本地计算机上创建新的postgres数据库1.将DB转储文件导入到新创建的数据库中
psql -U <dbuser> <database> < dump.sql
1.并使用"--column-inserts"从该数据库创建postgres转储
pg_dump --column-inserts -U <dbuser> <database> > dumpWithInserts.sql
x3naxklr2#
我写了一个工具来转换copy-from dump到insert dump:https://github.com/freddez/pg-dump2insert例如,您可以使用它在另一个数据库中加载转储或搜索特定的已删除值。
g0czyy6m3#
您不能将其转换为SQL格式(至少不能直接转换)。如果您不能重新导出,那么更简单的选择是绕过 phpPgadmin,登录到您的服务器并运行类似
cat [yourdump.sql] | psql [your connections args]
如果您没有shell访问服务器的权限,您可以尝试上传文件(通过SFTP或FTP),然后使用"COPY <table> FROM <path_to_file_on_server>"通过phpPgAdmin加载,但是如果有很多表,您必须(我相信)拆分文件,一次加载一个。http://phppgadmin.sourceforge.net/?page=faq
"COPY <table> FROM <path_to_file_on_server>"
bfnvny8b4#
您可以尝试使用COPY FROM PROGRAM语法(自PostgreSQL 9.3起可用例如:COPY tbl_customers (id, address_id, insurance_id, fullname, secret_code ...) FROM PROGRAM 'echo "1 2 \N Ivan Ivanov 42 ..."'
COPY tbl_customers (id, address_id, insurance_id, fullname, secret_code ...) FROM PROGRAM 'echo "1 2 \N Ivan Ivanov 42 ..."'
8fq7wneg5#
要添加Steffen答案,如果您想为所有值添加一个大的插入,那么还可以添加--rows-per-insert(添加到v12的pg_dump中):
--rows-per-insert
pg_dump --column-inserts --rows-per-insert=2147483647 \ -U <dbuser> <database> > dumpWithOneInsert.sql
(受https://stackoverflow.com/a/60621069/19888529启发)
5条答案
按热度按时间qyzbxkaa1#
我不知道有什么方法或工具可以将"COPY"转换为"INSERT"语句。
但是使用"pg_dump"命令行工具,你可以用"INSERT"而不是"COPY"语句创建一个DB转储文件。简单地使用"--column-inserts"参数(可以是"--inserts")。
你可以做的是:
1.在本地计算机上创建新的postgres数据库
1.将DB转储文件导入到新创建的数据库中
1.并使用"--column-inserts"从该数据库创建postgres转储
x3naxklr2#
我写了一个工具来转换copy-from dump到insert dump:
https://github.com/freddez/pg-dump2insert
例如,您可以使用它在另一个数据库中加载转储或搜索特定的已删除值。
g0czyy6m3#
您不能将其转换为SQL格式(至少不能直接转换)。
如果您不能重新导出,那么更简单的选择是绕过 phpPgadmin,登录到您的服务器并运行类似
如果您没有shell访问服务器的权限,您可以尝试上传文件(通过SFTP或FTP),然后使用
"COPY <table> FROM <path_to_file_on_server>"
通过phpPgAdmin加载,但是如果有很多表,您必须(我相信)拆分文件,一次加载一个。http://phppgadmin.sourceforge.net/?page=faq
bfnvny8b4#
您可以尝试使用COPY FROM PROGRAM语法(自PostgreSQL 9.3起可用
例如:
COPY tbl_customers (id, address_id, insurance_id, fullname, secret_code ...) FROM PROGRAM 'echo "1 2 \N Ivan Ivanov 42 ..."'
8fq7wneg5#
要添加Steffen答案,如果您想为所有值添加一个大的插入,那么还可以添加
--rows-per-insert
(添加到v12的pg_dump中):(受https://stackoverflow.com/a/60621069/19888529启发)