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

tak*_*hin 4 sql postgresql phppgadmin

我有一个使用 PHPPgadmin 制作的 PostgreSQL 备份,使用导出 > 复制(而不是复制 > SQL,这实际上是我需要的)。

文件包含这样的条目:

COPY tablename(id, field) FROM stdin;
...
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO tablename...
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*fen 6

我不知道可以将“COPY”转换为“INSERT”语句的方法或工具。

但是使用“pg_dump”命令行工具,您可以使用“INSERT”而不是“COPY”语句创建数据库转储文件。简单地使用“--column-inserts”参数(可能是“--inserts”也适合你)。

编辑:

你可以做的是:

  1. 在本地机器上创建一个新的 postgres 数据库
  2. 将您的数据库转储文件导入到新创建的数据库中

    psql -U <dbuser> <database> < dump.sql
    
    Run Code Online (Sandbox Code Playgroud)
  3. 并使用该数据库中的“--column-inserts”创建一个 postgres 转储

    pg_dump --column-inserts -U <dbuser> <database> > dumpWithInserts.sql
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

我编写了一个工具来将复制转储转换为插入转储:

https://github.com/freddez/pg-dump2insert

例如,您可以使用它在另一个数据库中加载转储或搜索特定的已删除值。


leo*_*loy 3

您无法将其转换为 SQL 格式(至少不能直接转换)。

如果您无法重新导出,那么更简单的选择是绕过phpPgadmin,登录您的服务器并运行类似的命令

cat [yourdump.sql]  | psql [your connections args]
Run Code Online (Sandbox Code Playgroud)

如果您没有服务器的 shell 访问权限,您可以尝试上传文件(通过 SFTP 或 FTP)并通过 phpPgAdmin 加载它"COPY <table> FROM <path_to_file_on_server>"。但如果有很多表,您必须(我相信)拆分文件并一次处理一个。

http://phppgadmin.sourceforge.net/?page=faq