我们正在切换主机,旧的主机提供了我们站点的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...
^
导入数据库的最佳方法是什么?
答案 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)
答案 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)
执行以下步骤:
\c db_name
\i path_of_dump
[例如:-C:/db_name.pgsql] 答案 11 :(得分:0)
我尝试了许多不同的解决方案来恢复postgres备份。我遇到了MacOS上被拒绝的问题,似乎没有解决方案。
这就是我的工作方式:
Postgres随附Pgadmin4。如果使用macOS,则可以按CMD
+ SPACE
并键入pgadmin4
来运行它。这将在Chrome中打开一个浏览器标签。
如果在使pgadmin4正常工作时遇到错误,请在终端中尝试
killall pgAdmin4
,然后重试。
通过右键单击数据库->“备份”来完成此操作
类似于test12345
。单击备份。这将创建一个二进制文件转储,它不是.sql
格式
屏幕的右下角应该有一个弹出窗口。点击“更多详细信息”页面,查看备份下载到的位置
在这种情况下,它是/users/vincenttang
假设您正确执行了步骤1到步骤4,您将拥有一个还原二进制文件。有时您的同事希望在其本地计算机上使用您的还原文件。说过有人去pgadmin并恢复
通过右键单击数据库->“恢复”来完成此操作
确保手动选择文件位置,请勿将文件拖放到pgadmin的上载器字段中。因为您会遇到错误权限。而是找到您刚刚创建的文件:
您可能必须将右下角的过滤器更改为“所有文件”。此后,从第4步中找到文件。现在,点击右下角的“选择”按钮进行确认
您将再次看到此页面,其中包含选定文件的位置。继续并还原它
如果一切正常,则右下角应弹出一个指示恢复成功的指示器。您可以导航到表以查看每个表上的数据是否已正确还原。
如果步骤9失败,请尝试删除数据库上的旧公共模式。转到“查询工具”
执行此代码块:
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
现在再次尝试步骤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