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

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

我已经创建了数据库的备份并复制了它,但是,是否有一种方法可以从命令行恢复备份?我只看到与GUI或pg_dumps相关的东西,所以,如果有人能告诉我如何做到这一点,那就太棒了!

1198468 次浏览

根据创建转储文件的方式,有两个工具可供参考。

你的第一个引用来源应该是手册页pg_dump,因为它是创建转储本身的东西。它说:

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

备选归档文件格式 必须与pg_restore(1)一起使用 重新构建数据库。他们允许 Pg_restore对什么有选择性 是恢复,还是重新排序 恢复之前的项。的 存档文件格式的设计

所以这取决于它被倾倒的方式。如果使用Linux/Unix,你可能可以使用出色的file(1)命令来解决这个问题——如果它提到ASCII文本和/或SQL,它应该用psql来恢复,否则你可能应该使用pg_restore

恢复非常简单:

psql -U username -d dbname < filename.sql


-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

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

查看它们各自的手册页-有相当多的选项会影响恢复的工作方式。你可能得清理一下你的“生活”。数据库或在恢复之前从template0重新创建它们(如注释中所指出的),这取决于转储是如何生成的。

创建备份

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包括气泡-v详细的-f备份文件名

从备份恢复

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

设置-h localhost - option很重要

你可能需要以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

指定备份文件的格式:

  • c将使用自定义的PostgreSQL格式,该格式被压缩并导致最小的备份文件大小
  • d用于目录,其中每个文件是一个表
  • t用于TAR存档(大于自定义格式)
  • -h/--host服务器所在机器的主机名
  • -W/--password连接数据库前强制pg_dump输入密码

恢复备份:

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

参数-C应该在导入数据之前创建数据库。如果它不工作,你总是可以创建数据库,如。(以用户postgres或其他具有创建数据库权限的帐户)

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

1. 打开终端。

2. 使用以下命令备份数据库

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

源数据库服务器->192.168.1.111

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

您的源db名称->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。备份文件到目标。

您的目标服务器->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"
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}


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

POSTGRESQL 9.1.12

转储文件:

pg_dump -U user db_name > archive_name.sql

输入用户密码并按enter键。

恢复:

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

输入用户密码并按enter键。

恢复postgres备份文件取决于最初是如何进行备份的。

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

sql -h localhost -p 5432 -U postgres <backupfile

9种方法备份和恢复postgres数据库

请看下面的例子,它的工作

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

C:\Users\Yogesh\Downloads\new下载\ DB.backup

下面是我用来恢复数据库的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

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

使用GZIP进行备份和恢复

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

备份

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

恢复

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

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

如下面的链接所示,你可以使用psql命令来恢复转储文件:

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

psql dbname < infile

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

psql dbname < infile username

如果您使用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. 检查恢复进程

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

mv database_dump /tmp

进入临时目录,然后运行

su -u postgres
cd /tmp
pg_restore database_dump

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

试试下面的命令是否能帮到你:

sudo su - yourdbuser
psql
\i yourbackupfile

当需要备份数据或从备份中恢复数据时,使用以下命令:

  1. 要创建数据备份,进入postgres \bin\目录,如C:\programfiles\postgres\10\bin\,然后键入以下命令:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
    
  2. To restore data from a backup, go to your postgres \bin\ directory like C:\programfiles\postgres\10\bin\ and then type below command:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup
    

    .请确认备份文件存在

1)打开psql终端。

2)解压/ untar转储文件。

3)创建一个空数据库。

4)使用以下命令恢复。dump文件

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

试试这个:

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

从。sql文件恢复数据库psql

试一试:

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

如果你有一个备份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执行它的工作。查看恢复进程。

这招对我很管用:

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

对不起,这些解决方案对我不起作用。我在10号邮差。在Linux上:

  1. 我必须将目录更改为pg_hba.conf。
  2. 我必须编辑该文件以将方法从peer更改为md5,如在这里所述
  3. 重新启动服务:service postgresql-10 restart
  4. 更改备份目录。SQL被定位并执行:
    psql postgres -d database_name -1 -f backup.sql < / p >

    -database_name是数据库的名称

    - backup。

    . SQL是我的。SQL备份文件名

我没有看到这里提到转储文件扩展名(*.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

遵循以下3个步骤:

  1. 启动postgres server - sudo systemctl start postgresql
  2. enable same - sudo systemctl enable postgresql
  3. 恢复命令- pg_restore -h localhost -p 5432 -U postgres -d old_db . zip

假设转储文件在同一目录中

链接:

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

备份= =比;

选项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
Option3:以gzip格式备份(如果数据库比较大)
3. pg_dump -U postgres -h localhost mydb --inserts | gzip > mydb.gz < / p > < p >恢复:
1. psql -h localhost -d mydb -U postgres -p 5432 < mydb.sql < / p >

备份,恢复

这是我使用的组合备份,删除,创建和恢复我的数据库(在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

Misc

  • -Fc将压缩数据库(< >强F < / >强ormat c <强> < / >强ustom)
  • 列出PostgreSQL用户:sudo -u postgres psql -c "\du+"
  • 你可能想要将主机名日期添加到./mydb.sql,然后通过以下方式更改它:
    ./`hostname`_mydb_`date +"%Y%m%d_%H%M"`.sql
    

此解决方案仅适用于窗户

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

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

pg_restore -U userName -d database-1 backupfile.sql

例如:

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

(它会问你的用户密码,所以确保输入正确,然后点击enter)

对于维达!

如果您已经创建了一个名为mydb的新数据库,要使用psql将.sql转储恢复到该数据库,

psql --file=dump.sql --username=postgres --host=localhost --port=5432 mydb

密码将由PSQL提示

连接选项为

  -h, --host=HOSTNAME      database server host or socket directory (default: "/var/run/postgresql")
-p, --port=PORT          database server port (default: "5432")
-U, --username=USERNAME  database user name (default: "xyz")
-w, --no-password        never prompt for password
-W, --password           force password prompt (should happen automatically)

恢复转储文件

psql -d [Dbname] -U [UserName] -p 5432 < [FileLocation]

恢复一个.SQL文件

pg_restore -U [Username] -d [Dbname] -1 [FileLocation]
如果你得到用户身份验证错误,转到程序文件中PSQL/data文件夹中的pg_hba.conf文件,并更改“;METHOD"Trust"“帮助”。 重新启动psql服务在windows服务(Win + R—>services.msc)。< / p >

没有密码提示的最短路径

psql "postgresql://<db_user>:<db_pass>@<ip>:<port>/<db_name>" < "backup.sql"

如果您使用Windows操作系统

psql.exe "postgresql://<db_user>:<db_pass>@<ip>:<port>/<db_name>" < "backup.sql"

如果你正在使用docker,这个答案可能会有帮助。

  1. 启动容器
    docker start <postgres_container_id>
    
  2. 访问容器中的bash
    docker exec -it <postgres_container_id> bash
    
  3. .tar备份文件复制到docker容器(在另一个窗口中)
    docker cp postgres_dump.tar <postgres_container_id>:/
    
  4. 恢复备份
    pg_restore -c -U <postgres-user> -d <password>  -v "postgres_dump.tar" -W
    
  5. 输入密码

使用压缩转储保存和恢复完全相同的状态

其他答案分别给出了所有的关键位,但希望这将提供“只是工作保存和恢复到准确的状态”。命令。

转储到文件mydb.psql:

PGPASSWORD=mypassword pg_dump -U my_username -h localhost mydb -Fc -f mydb.psql

恢复:

PGPASSWORD=mypassword pg_restore -U my_username -h localhost \
--clean -d mydb -v mydb.psql

一些旗帜:

  • -Fc:格式压缩,而不是明文。

    file tmp.psql说:

    tmp.psql: PostgreSQL custom database dump - v1.14-0
    
  • --clean:在恢复目标DB之前销毁它,从而返回到完全相同的原始状态。

    转储之后创建的任何数据都将丢失。

PGPASSWORD-U-h当然可以根据你的登录方法进行修改,例如,如果没有PGPASSWORD,你会提示输入密码,如果你在本地设置peer auth,这些都不需要。

在Ubuntu 22.04和PostgreSQL 14.5上测试。