使用命令行恢复postgres备份文件?

时间:2010-04-28 19:18:11

标签: postgresql command-line backup restore

我是postgresql的新手,在本地,我使用的是pgadmin3。然而,在远程服务器上,我没有这么奢侈。

我已经创建了数据库的备份并将其复制了,但是,有没有办法从命令行恢复备份?我只看到与GUI或pg_dumps相关的内容,所以,如果有人能告诉我如何解决这个问题,那就太棒了!

26 个答案:

答案 0 :(得分:257)

有两种工具可供查看,具体取决于您创建转储文件的方式。

您的第一个引用来源应该是手册页pg_dump(1),因为这就是创建转储本身的原因。它说:

  

转储可以用脚本或输出   存档文件格式。脚本转储是   包含SQL的纯文本文件   重建所需的命令   数据库到了它的状态   在它被保存的时候。至   从这样的脚本恢复,将其提供给   psql的(1)。可以使用脚本文件   甚至重建数据库   在其他机器和其他机器上   架构;经过一些修改   甚至在其他SQL数据库产品上也是如此。

     

备用存档文件格式   必须与pg_restore(1)一起使用   重建数据库。他们允许   pg_restore要选择什么   恢复,甚至重新排序   恢复之前的项目。该   存档文件格式旨在   可跨机构移植。

所以取决于它被淘汰的方式。你可以使用优秀的file(1)命令来解决它 - 如果它提到了ASCII文本和/或SQL,它应该用psql恢复,否则你应该使用pg_restore

恢复非常简单:

psql -U <username> -d <dbname> -1 -f <filename>.sql

pg_restore -U <username> -d <dbname> -1 <filename>.dump

查看各自的联机帮助页 - 有很多选项会影响还原的工作方式。在恢复之前,您可能必须清理“实时”数据库或从template0重新创建它们(如注释中所指出的那样),具体取决于转储的生成方式。

答案 1 :(得分:146)

创建备份

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c是自定义格式(压缩,并且能够与-j N并行执行)-b包括blob,-v是详细的,-f是备份文件名

从备份恢复

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

设置 -h localhost 非常重要 - 选项

答案 2 :(得分:64)

您可能需要以postgres身份登录才能拥有数据库的完全权限。

su - postgres
psql -l                      # will list all databases on Postgres cluster

<强>的pg_dump / pg_restore的

  pg_dump -U username -f backup.dump database_name -Fc 

switch -F指定备份文件的格式:

  • c将使用自定义的PostgreSQL格式,该格式经过压缩并产生最小的备份文件大小
  • d表示每个文件是一个表的目录
  • t用于TAR存档(大于自定义格式)
  • -h / --host指定运行服务器的计算机的主机名
  • -W / --password强制pg_dump在连接数据库之前提示输入密码

恢复备份:

   pg_restore -d database_name -U username -C backup.dump

参数-C应在导入数据之前创建数据库。如果它不起作用,您可以随时创建数据库,例如。 with command(作为用户postgres或其他有权创建数据库的帐户)createdb db_name -O owner

<强>的pg_dump / PSQL

如果您未指定参数-F,则使用默认纯文本SQL格式(或使用-F p)。然后你不能使用pg_restore。您可以使用psql导入数据。

备份:

pg_dump -U username -f backup.sql database_name

恢复:

psql -d database_name -f backup.sql

答案 3 :(得分:44)

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

输入用户密码并按Enter键。

RESTORE:

psql -U user db_name < /directory/archive.sql

输入用户密码并按Enter键。

答案 4 :(得分:27)

以下是我用于恢复数据库的pg_dump版本:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

或使用psql

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

其中-h主机,-p端口,-u登录用户名,-d数据库名称

答案 5 :(得分:12)

使用GZIP备份和恢复

  

对于较大尺寸的数据库,这是非常好的

备份

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

resore

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html

答案 6 :(得分:8)

Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}

答案 7 :(得分:6)

1.打开终端。

2.使用以下命令

备份数据库

你的postgres bin - /opt/PostgreSQL/9.1/bin /

您的源数据库服务器 - 192.168.1.111

您的备份文件位置和名称 - /home/dinesh/db/mydb.backup

您的源数据库名称 - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host'192.168.1.111' - port 5432 --username“postgres”--no-password --format custom --blobs --file“/ home / dinesh / db / mydb.backup“”mydatabase“

3.将mydb.backup文件删除到目的地。

您的目标服务器 - localhost

您的目标数据库名称 - mydatabase

创建数据库以恢复备份。

/opt/PostgreSQL/9.1/bin/psql -h'localhost'-p 5432 -U postgres -c“CREATE DATABASE mydatabase”

恢复备份。

/opt/PostgreSQL/9.1/bin/pg_restore --host'localhost' - port 5432 --username“postgres” - dbname“mydatabase”--no-password --clean“/ home / dinesh / db /mydb.backup“

答案 8 :(得分:4)

我在这里没有看到有关转储文件扩展名(* .dump)的提及。

此解决方案对我有用:

我有一个转储文件,需要恢复它。

首先,我尝试使用pg_restore进行此操作并得到:

pg_restore: error: input file appears to be a text format dump. Please use psql.

我用psql做到了,并且运行良好:

psql -U myUser-d myDataBase < path_to_the_file/file.dump

答案 9 :(得分:3)

如果使用pg_dump创建备份,则可以通过以下方式轻松恢复:

  1. 打开命令行窗口
  2. 转到Postgres bin文件夹。例如: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. 输入恢复数据库的命令。 For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. 为postgres用户键入密码
  5. 检查还原过程

答案 10 :(得分:3)

尝试:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>

答案 11 :(得分:2)

尝试查看以下命令是否可以帮助您:

sudo su - yourdbuser
psql
\i yourbackupfile

答案 12 :(得分:2)

备份和还原

这是我用来备份,删除,创建和还原我的数据库(在macOS和Linux上)的组合:

sudo -u postgres pg_dump -Fc mydb > ./mydb.sql
sudo -u postgres dropdb mydb
sudo -u postgres createdb -O db_user mydb
sudo -u postgres pg_restore -d mydb < ./mydb.sql

其他

  • -Fc将压缩数据库(format custom
  • 列出PostgreSQL用户:sudo -u postgres psql -c "\du+"
  • 您可能想将主机名日期添加到./mydb.sql,然后通过以下方法进行更改:
    ./`hostname`_mydb_`date +"%Y%m%d_%H%M"`.sql
    

答案 13 :(得分:2)

很抱歉,您的死灵书对我来说不起作用。我正在使用postgres10。在Linux上:

  1. 我不得不将目录更改为pg_hba.conf。
  2. 我不得不编辑文件,以将方法从对等方更改为md5,如here
  3. 重新启动服务:service postgresql-10 restart
  4. 将目录更改到我的backup.sql所在的位置并执行:
    psql postgres -d database_name -1 -f backup.sql

    -database_name是我的数据库的名称

    -backup.sql是我的.sql备份文件的名称。

答案 14 :(得分:2)

这对我有用:

pg_restore --verbose --clean --no-acl --no-owner --host = localhost -dbname = db_name --username = username Latest.dump

答案 15 :(得分:2)

尝试一下:

psql -U <username> -d <dbname> -f <filename>.sql

从.sql文件还原DB psql

答案 16 :(得分:2)

如下所示,您可以使用psql命令恢复转储文件:

https://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE

psql dbname < infile

如果您需要设置用户名,只需在命令后添加用户名,如:

psql dbname < infile username

答案 17 :(得分:1)

1)打开psql终端。

2)解压/解压转储文件。

3)创建一个空数据库。

4)使用以下命令还原.dump文件

<database_name>-# \i <path_to_.dump_file>

答案 18 :(得分:1)

如果您有备份SQL文件,则可以轻松地将其还原。 只需按照下面的指示进行操作

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

根据需要输入您的postgres用户的密码,然后让Postgres进行操作。然后,您可以检查还原过程。

答案 19 :(得分:1)

恢复postgres备份文件取决于您首先如何进行备份。

如果你使用pg_dump和-F c或-F d你需要使用pg_restore,否则你可以使用

  

psql -h localhost -p 5432 -U postgres&lt; backupfile

9 ways to backup and restore postgres databases

答案 20 :(得分:0)

如果要备份数据或从备份还原数据,可以运行以下命令:

1要创建数据备份,请转到C:\programfiles\postgres\10\bin\之类的postgres \ bin \目录,然后键入以下命令- pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup

2要从备份恢复数据,请转到C:\programfiles\postgres\10\bin\之类的postgres \ bin \目录,然后在命令下方键入-C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

请确保备份文件存在。

答案 21 :(得分:0)

我在运行pg_dump时遇到身份验证问题,所以我移动了转储文件

mv database_dump /tmp

进入temp目录然后运行

su -u postgres
cd /tmp
pg_restore database_dump

如果您有一个大型数据库转储,您可能只想创建另一个目录,当前用户和postgres用户可以访问该目录并将数据库转储文件放入该目录。

答案 22 :(得分:0)

Backup ==>

选项1:与cmd中的密码一起备份
1.PGPASSWORD="mypassword" pg_dump -U postgres -h localhost --inserts mydb>mydb.sql
选项2:在cmd中无需密码即可进行备份
2. pg_dump -U postgres -h localhost --inserts mydb>mydb.sql
选项3:以gzip格式进行备份(如果数据库很大)
3. pg_dump -U postgres -h localhost mydb --inserts | gzip > mydb.gz

还原:
1. psql -h localhost -d mydb -U postgres -p 5432 < mydb.sql

答案 23 :(得分:0)

此解决方案仅适用于 Windows

首先,确保您已经将 postgres bin 文件夹添加到“Path”环境变量中(在我的例子中,这个文件夹是 C:\Program Files\PostgreSQL\12\bin)。

然后,打开 Windows 命令解释器 (cmd),进入 .sql 文件所在的文件夹并执行以下命令:

pg_restore -U 用户名 -d database-1 备份文件.sql

例如:

pg_restore -U sam -d SamDataBase -1 SamDataBaseBackup.sql

(它会要求你输入用户的密码,所以请确保输入正确,然后点击回车)

纯粹的生活!

答案 24 :(得分:-1)

请遵循以下三个步骤:

  1. 启动postgres服务器-sudo systemctl start postgresql
  2. 启用相同-sudo systemctl enable postgresql
  3. 还原命令-pg_restore -h localhost -p 5432 -U postgres -d old_db

假定转储在同一目录中

链接

https://www.postgresqltutorial.com/postgresql-restore-database https://askubuntu.com/questions/50621/cannot-connect-to-postgresql-on-port-5432

答案 25 :(得分:-3)

见下面的例子

C:/ Program Files / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --username&#34; postgres&#34; --dbname&#34; newDatabase&#34; --no-password --verbose

&#34; C:\ Users \ Yogesh \ Downloads \ new Download \ DB.backup &#34;