将SQL转储导入PostgreSQL数据库

daz*_*azz 411 database postgresql

我们正在切换主机,旧的主机提供了我们站点的PostgreSQL数据库的SQL转储.

现在,我正在尝试在本地WAMP服务器上设置它来测试它.

唯一的问题是我不知道如何在我设置的PostgreSQL 9中导入这个数据库.

我试过pgAdmin III,但我似乎无法找到'导入'功能.所以我只是打开了SQL编辑器并将转储的内容粘贴在那里并执行它,它创建了表,但它在尝试将数据放入其中时一直给我错误.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  
Run Code Online (Sandbox Code Playgroud)

我也尝试使用命令提示符执行此操作,但我找不到我需要的命令.

如果我做

psql mydatabase < C:/database/db-backup.sql;
Run Code Online (Sandbox Code Playgroud)

我收到了错误

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^
Run Code Online (Sandbox Code Playgroud)

导入数据库的最佳方法是什么?

Jac*_*cob 669

psql databasename < data_base_dump
Run Code Online (Sandbox Code Playgroud)

那是你要找的命令.

注意:databasename必须在导入之前创建.查看PostgreSQL Docs第23章备份和还原.

  • psql --username = postgres databasename <data_base_dump.sql (42认同)
  • @Dazz你必须从命令提示符(开始 - >运行 - > cmd)执行此命令,而不是从postgres提示符. (18认同)
  • @Dazz:您也可以使用`-f`开关(或`--file`) (3认同)
  • 我试过 psql mydatabase &lt; C:\database\db-backup.sql 但我收到错误无效命令 \database。我也尝试在它周围使用“”。 (2认同)
  • 如果我从cmd运行它,则会得到“'&lt;'运算符保留供将来使用。” (2认同)
  • 不能。您引用的错误来自 PowerShell,而不是来自 Windows 命令提示符。您正在将命令输入到错误的 shell 中。 (2认同)

小智 334

这是您要查找的命令.

psql -h hostname -d databasename -U username -f file.sql
Run Code Online (Sandbox Code Playgroud)

  • 好,但更好的附加"-L logfile.log"参数来记录文件的输出. (26认同)
  • 得到这个“输入是 PostgreSQL 自定义格式转储。使用 pg_restore 命令行客户端将此转储恢复到数据库。” (2认同)
  • 您还可以:`pg_restore -h主机名-d dbname -U用户名filename.sql` (2认同)

小智 103

我相信你想在psql中运行:

\i C:/database/db-backup.sql
Run Code Online (Sandbox Code Playgroud)

  • 确保首先使用\ c &lt;database_name&gt;更改为数据库 (2认同)

iva*_*vic 48

这对我有用:

sudo -u postgres psql db_name < 'file_path'
Run Code Online (Sandbox Code Playgroud)

  • 作为postgres跑来帮助我,谢谢! (3认同)

roc*_*hus 42

我不确定这是否适用于OP的情况,但我发现在交互式控制台中运行以下命令对我来说是最灵活的解决方案:

\i 'path/to/file.sql'
Run Code Online (Sandbox Code Playgroud)

只需确保您已连接到正确的数据库.此命令执行指定文件中的所有SQL命令.

  • 这个解决方案对我有用,而投票最多的解决方案产生了“stdin is not a tty”错误。 (2认同)

Feu*_*uda 39

工作得很好,在命令行中,所有参数都是必需的,-W代表密码

psql -h localhost -U user -W -d database_name -f path/to/file.sql
Run Code Online (Sandbox Code Playgroud)


ala*_*lan 21

只是为了测试,如果您的转储被压缩,您可以做类似的事情

gunzip -c filename.gz | psql dbname

正如Jacob所说,PostgreSQL文档很好地描述了这一切.


rub*_*o77 8

确保您要导入的数据库已创建,然后您可以导入转储

sudo -u postgres -i psql testdatabase < db-structure.sql
Run Code Online (Sandbox Code Playgroud)

如果要覆盖整个数据库,请先删除数据库

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"
Run Code Online (Sandbox Code Playgroud)

然后重新创建它

sudo -u postgres -i psql -c "create database testdatabase;"
Run Code Online (Sandbox Code Playgroud)


小智 8

我用过这个

psql -d dbName -U username -f /home/sample.sql
Run Code Online (Sandbox Code Playgroud)


Vin*_*ang 7

我尝试了许多不同的解决方案来恢复我的 postgres 备份。我在 MacOS 上遇到了权限被拒绝的问题,似乎没有任何解决方案有效。

这是我如何让它工作的:

Postgres 带有 Pgadmin4。如果您使用 macOS,则可以按CMD+SPACE并键入pgadmin4以运行它。这将在 chrome 中打开一个浏览器选项卡。

如果您在使 pgadmin4 工作时遇到错误,请尝试killall pgAdmin4在您的终端中,然后再试一次。


获取 pgadmin4 + 备份/恢复的步骤

1. 创建备份

通过右键单击数据库->“备份”来执行此操作

在此处输入图片说明

2. 为文件命名。

喜欢test12345。单击备份。这会创建一个二进制文件转储,它不是一种.sql格式

在此处输入图片说明

3.查看下载地址

屏幕右下角应该有一个弹出窗口。单击“更多详细信息”页面以查看备份下载到的位置

在此处输入图片说明

4. 找到下载文件的位置

在这种情况下,它是 /users/vincenttang

在此处输入图片说明

5. 从 pgadmin 恢复备份

假设您正确地执行了步骤 1 到 4,您将拥有一个还原二进制文件。有时您的同事可能想要在他们的本地机器上使用您的还原文件。有人说有人去 pgadmin 并恢复

通过右键单击数据库->“还原”来执行此操作

在此处输入图片说明

6.选择文件查找器

确保手动选择文件位置,不要将文件拖放到 pgadmin 中的上传器字段上。因为你会遇到错误权限。相反,找到您刚刚创建的文件:

在此处输入图片说明

7. 找到上述文件

您可能需要将右下角的过滤器更改为“所有文件”。之后从第 4 步开始查找文件。现在点击右下角的“选择”按钮进行确认

在此处输入图片说明

8. 恢复上述文件

您将再次看到此页面,并选择了文件的位置。继续并恢复它

在此处输入图片说明

9. 成功

如果一切正常,右下角应弹出一个指示符,显示成功恢复。您可以导航到您的表以查看每个表上的数据是否已恢复正常。

10. 如果不成功:

如果第 9 步失败,请尝试删除数据库上的旧公共架构。转到“查询工具”

在此处输入图片说明

执行此代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在再次尝试第 5 步到第 9 步,应该会成功

概括

当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须在 Postgres 上备份/恢复备份的方式。或者使用chmod文件夹设置读/写凭据。此工作流程适用于 pgadmin 的“自定义”二进制文件转储默认值。我认为.sql是相同的方式,但我还没有测试过


Kir*_*ich 6

我注意到许多示例对于 localhost 来说过于复杂,其中在许多情况下只存在没有密码的 postgres 用户:

psql -d db_name -f dump.sql
Run Code Online (Sandbox Code Playgroud)


Shi*_*pta 6

按照步骤:

  1. 转到 psql 外壳
  2. \c db_name
  3. \i path_of_dump [例如:-C:/db_name.pgsql]


Van*_*gal 5

您可以在 pgadmin3 中完成。删除转储包含的架构。然后右键单击数据库并选择还原。然后您可以浏览转储文件。

  • 但是即使在选择 .sql 文件后,“恢复”按钮也无法点击。该软件似乎需要其他类型的文件 - 具有 *.backup 格式的文件。单击该导入框上的“帮助”指的是 pg_restore -“...用于从 pg_dump 创建的非纯文本格式之一的存档中恢复 PostgreSQL 数据库的实用程序。” OP 引用的 sql 文件是纯文本格式。 (2认同)

Vaj*_*tha 5

我用:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>
Run Code Online (Sandbox Code Playgroud)

希望这会帮助某人。


小智 5

如果您使用的是带有.dump扩展名的文件,请使用:

pg_restore -h hostname -d dbname -U username filename.dump