postgresql SQL:将备份文件从复制格式转换为插入格式

jljoyd4f  于 2023-03-01  发布在  PostgreSQL
关注(0)|答案(5)|浏览(246)

我有一个PostgreSQL备份与PHPPgadmin使用导出〉复制(而不是复制〉SQL,这实际上是我需要的)。
文件包含如下条目:

COPY tablename(id, field) FROM stdin;
...

如何将此文件转换为SQL格式?

INSERT INTO tablename...

我想使用Pgadmin来导入此文件使用执行SQL命令。

qyzbxkaa

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
x3naxklr

x3naxklr2#

我写了一个工具来转换copy-from dump到insert dump:
https://github.com/freddez/pg-dump2insert
例如,您可以使用它在另一个数据库中加载转储或搜索特定的已删除值。

g0czyy6m

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

bfnvny8b

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 ..."'

8fq7wneg

8fq7wneg5#

要添加Steffen答案,如果您想为所有值添加一个大的插入,那么还可以添加--rows-per-insert(添加到v12的pg_dump中):

pg_dump --column-inserts --rows-per-insert=2147483647 \
        -U <dbuser> <database> > dumpWithOneInsert.sql

(受https://stackoverflow.com/a/60621069/19888529启发)

相关问题