【问题标题】:SQL: convert backup file from copy format to insert formatSQL:将备份文件从复制格式转换为插入格式
【发布时间】:2010-05-13 13:20:57
【问题描述】:

我有一个使用 PHPPgadmin 的 PostgreSQL 备份,使用 Export > Copy(而不是 Copy > SQL,这实际上是我需要的)。

文件包含这样的条目:

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

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

INSERT INTO tablename...

我想使用 Pgadmin 通过执行 SQL 命令导入这个文件。

【问题讨论】:

  • 你的意思是phpPgAdmin,不是吗? (pgadmin 是桌面客户端)

标签: sql postgresql phppgadmin


【解决方案1】:

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

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

编辑:

你可以做的是:

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

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

    pg_dump --column-inserts -U <dbuser> <database> > dumpWithInserts.sql
    

【讨论】:

    【解决方案2】:

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

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

    cat [yourdump.sql]  | psql [your connections args]
    

    如果您没有对服务器的 shell 访问权限,您可以尝试上传文件(通过 SFTP 或 FTP)并通过 phpPgAdmin 使用"COPY &lt;table&gt; FROM &lt;path_to_file_on_server&gt;" 加载它。但是如果有很多表,你必须(我相信)拆分文件并一次做一个。

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

    【讨论】:

      【解决方案3】:

      您可以尝试 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 ..."'

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 不错的工具!甚至 5 年后仍然有效
        • @WestCoastProjects 你能帮我转换一个文件吗?
        猜你喜欢
        • 2015-11-08
        • 2023-04-11
        • 2012-08-31
        • 1970-01-01
        • 2019-04-07
        • 2021-06-01
        • 1970-01-01
        • 2021-04-09
        • 2021-12-28
        相关资源
        最近更新 更多