将SQL转储导入PostgreSQL数据库

时间:2011-07-27 09:50:51

标签: 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 ...  

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

如果我这样做

psql mydatabase < C:/database/db-backup.sql;

我收到错误

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

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

16 个答案:

答案 0 :(得分:604)

psql databasename < data_base_dump

这是你要找的命令。

注意:导入前必须创建databasename。 看看PostgreSQL Docs Chapter 23. Backup and Restore

答案 1 :(得分:305)

这是您要查找的命令。

psql -h hostname -d databasename -U username -f file.sql

答案 2 :(得分:96)

我相信你想在psql中运行:

\i C:/database/db-backup.sql

答案 3 :(得分:45)

这对我有用:

sudo -u postgres psql db_name < 'file_path'

答案 4 :(得分:35)

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

var useDb = require('./main').useDb;

useDb(function (err, db) {
    db.collection('players').update({id: player.id}, {$set: {x: player.x, y: player.y}}, function(err, result) {
        console.log(err, result);
    });
});

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

答案 5 :(得分:32)

非常好用,在命令行中,所有参数都是必需的,-W代表密码

psql -h localhost -U user -W -d database_name -f path/to/file.sql

答案 6 :(得分:21)

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

的操作

gunzip -c filename.gz | psql dbname

正如雅各布所说,PostgreSQL docs很好地描述了这一切。

答案 7 :(得分:5)

我用:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

希望这会对某人有所帮助。

答案 8 :(得分:4)

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

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

答案 9 :(得分:3)

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

答案 10 :(得分:1)

执行以下步骤:

  1. 进入psql shell
  2. \c db_name
  3. \i path_of_dump [例如:-C:/db_name.pgsql]

答案 11 :(得分:0)

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

这就是我的工作方式:

Postgres随附Pgadmin4。如果使用macOS,则可以按CMD + SPACE并键入pgadmin4来运行它。这将在Chrome中打开一个浏览器标签。

  

如果在使pgadmin4正常工作时遇到错误,请在终端中尝试killall pgAdmin4,然后重试。


获取pgadmin4 +备份/还原的步骤

1。创建备份

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

enter image description here

2。给文件起一个名字。

类似于test12345。单击备份。这将创建一个二进制文件转储,它不是.sql格式

enter image description here

3。查看下载位置

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

enter image description here

4。找到下载文件的位置

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

enter image description here

5。从pgadmin恢复备份

假设您正确执行了步骤1到步骤4,您将拥有一个还原二进制文件。有时您的同事希望在其本地计算机上使用您的还原文件。说过有人去pgadmin并恢复

通过右键单击数据库->“恢复”来完成此操作

enter image description here

6。选择文件查找器

确保手动选择文件位置,请勿将文件拖放到pgadmin的上载器字段中。因为您会遇到错误权限。而是找到您刚刚创建的文件:

enter image description here

7。找到所说的文件

您可能必须将右下角的过滤器更改为“所有文件”。此后,从第4步中找到文件。现在,点击右下角的“选择”按钮进行确认

enter image description here

8。恢复所说的文件

您将再次看到此页面,其中包含选定文件的位置。继续并还原它

enter image description here

9。成功

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

10。如果不成功:

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

enter image description here

执行此代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

enter image description here

现在再次尝试步骤5到9,应该可以解决

摘要

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

答案 12 :(得分:0)

您应该使用pg_restore

$ pg_restore -h hostname -d dbname -U username filename.sql

答案 13 :(得分:0)

确保已创建要导入的数据库,然后可以使用

导入转储。
sudo -u postgres -i psql testdatabase < db-structure.sql

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

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

然后使用

重新创建
sudo -u postgres -i psql -c "create database testdatabase;"

答案 14 :(得分:0)

Postgresql12

来自sql文件: pg_restore -d数据库

来自自定义格式文件: pg_restore -Fc数据库

答案 15 :(得分:0)

我的数据超过100MB,因此无法使用Pgadmin4还原数据库。

我只使用了postgres客户程序,并在下面的命令中编写。

postgres @ khan:/ $ pg_restore -d database_name /home/khan/Downloads/dump.sql

工作正常,花费了几秒钟。有关更多信息,请参见下面的链接。 https://www.postgresql.org/docs/8.1/app-pgrestore.html