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章备份和还原.
小智 334
这是您要查找的命令.
psql -h hostname -d databasename -U username -f file.sql
Run Code Online (Sandbox Code Playgroud)
小智 103
我相信你想在psql中运行:
\i C:/database/db-backup.sql
Run Code Online (Sandbox Code Playgroud)
iva*_*vic 48
这对我有用:
sudo -u postgres psql db_name < 'file_path'
Run Code Online (Sandbox Code Playgroud)
roc*_*hus 42
我不确定这是否适用于OP的情况,但我发现在交互式控制台中运行以下命令对我来说是最灵活的解决方案:
\i 'path/to/file.sql'
Run Code Online (Sandbox Code Playgroud)
只需确保您已连接到正确的数据库.此命令执行指定文件中的所有SQL命令.
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文档很好地描述了这一切.
确保您要导入的数据库已创建,然后您可以导入转储
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)
我尝试了许多不同的解决方案来恢复我的 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;
Run Code Online (Sandbox Code Playgroud)
现在再次尝试第 5 步到第 9 步,应该会成功
当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须在 Postgres 上备份/恢复备份的方式。或者使用chmod文件夹设置读/写凭据。此工作流程适用于 pgadmin 的“自定义”二进制文件转储默认值。我认为.sql是相同的方式,但我还没有测试过
我注意到许多示例对于 localhost 来说过于复杂,其中在许多情况下只存在没有密码的 postgres 用户:
psql -d db_name -f dump.sql
Run Code Online (Sandbox Code Playgroud)
您可以在 pgadmin3 中完成。删除转储包含的架构。然后右键单击数据库并选择还原。然后您可以浏览转储文件。
我用:
cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>
Run Code Online (Sandbox Code Playgroud)
希望这会帮助某人。