我是 postgresql 的新手,在本地,我使用 pgadmin3。然而,在远程服务器上,我没有这种奢侈。
我已经创建了数据库的备份并将其复制过来,但是,有没有办法从命令行恢复备份?我只看到与 GUI 或 pg_dumps 相关的东西,所以,如果有人能告诉我如何去做,那就太好了!
有两种工具可供查看,具体取决于您创建转储文件的方式。
您的第一个参考来源应该是手册页 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
包括 blob,-v
是 详细< /em>,-f
是备份文件名。
从备份恢复
pg_restore -h localhost -p 5432 -U postgres -d old_db -v
"/usr/local/backup/10.70.0.61.backup"
重要的是设置 -h localhost
- 选项
您可能需要以 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
开关 -F
指定备份文件的格式:
c 将使用自定义的 PostgreSQL 格式,该格式被压缩并导致最小的备份文件大小
表示每个文件是一个表的目录
用于 TAR 存档(大于自定义格式)
-h/--host 指定运行服务器的机器的主机名
-W/--password 强制 pg_dump 在连接到数据库之前提示输入密码
恢复备份:
pg_restore -d database_name -U username -C backup.dump
参数 -C
应在导入数据之前创建数据库。如果它不起作用,您可以随时创建数据库,例如。使用命令(作为用户 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
postgres
)设置了密码,则应使用 -W
选项。例如,在 Ubuntu 上,没有在终端 $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sql
的任何地方执行 su postgres
的命令对我有用,可以在我的本地主机上恢复我的备份。请注意,需要 -h
选项。
-W
选项从来都不是必需的。如果服务器要求密码验证,pg_dump
将自动提示输入密码。如果您使用纯文本密码,您也可以使用 PGPASSWORD
环境变量。如果默认的 PGHOST
不适用,则需要 -h
。这些选项对于许多 PostgreSQL 实用程序都很常见,因此对于回答这个问题不是必需的(这在很大程度上取决于您的设置)。
pg_dump/psql
部分对我有用。但第一部分 pg_dump/pg_restore
不适用于我的恢复。谢谢你。
-Fc
PostgreSQL 9.1.12
倾倒:
pg_dump -U user db_name > archive_name.sql
输入用户密码并按回车。
恢复:
psql -U user db_name < /directory/archive.sql
输入用户密码并按回车。
下面是我用来恢复数据库的 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
数据库名称
psql
时 my_new_database
应该已经存在,不是吗?
使用 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
gunzip -c mydb.pgsql.gz | sudo -u postgres psql
获取操作数据库的权限。转储时还要考虑 --clean
标志,它将擦除所有现有数据,可能会派上用场。
这对我有用:
pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump
--no-owner
真的帮助了我。
Backup: $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}
尝试这个:
psql -U <username> -d <dbname> -f <filename>.sql
从 .sql 文件恢复数据库 psql
如果您使用 pg_dump 创建备份,您可以通过以下方式轻松恢复它:
打开命令行窗口转到 Postgres bin 文件夹。例如: cd "C:\ProgramFiles\PostgreSQL\9.5\bin" 输入命令来恢复你的数据库。例如: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql 输入您的 postgres 用户的密码 检查恢复过程
我没有看到这里提到转储文件扩展名 (*.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
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"
1) 打开 psql 终端。
2) 解压/解压转储文件。
3) 创建一个空数据库。
4)使用以下命令恢复.dump文件
<database_name>-# \i <path_to_.dump_file>
备份和恢复
这是我用来备份、删除、创建和恢复我的数据库的组合(在 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 将压缩数据库(格式自定义)
列出 PostgreSQL 用户: sudo -u postgres psql -c "\du+"
您可能希望将主机名和日期添加到 ./mydb.sql,然后通过以下方式更改它:./`hostname`_mydb_`date +"%Y%m%d_%H%M"`.sql
pg_restore: [custom archiver] WARNING: ftell mismatch with expected position -- ftell used
,所以我不知道那是什么意思...
恢复转储文件
psql -d [Dbname] -U [UserName] -p 5432 < [FileLocation]
恢复 .SQL 文件
pg_restore -U [Username] -d [Dbname] -1 [FileLocation]
如果您遇到用户验证错误,请转到程序文件中 PSQL/data 文件夹中的文件 pg_hba.conf,并将“METHOD”更改为“Trust”。在 Windows 服务中重新启动 psql 服务(Win + R --> services.msc)。
尝试:
pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>
恢复 postgres 备份文件取决于您最初是如何进行备份的。
如果您将 pg_dump 与 -F c 或 -F d 一起使用,则需要使用 pg_restore 否则您可以使用
psql -h localhost -p 5432 -U postgres <备份文件
9 ways to backup and restore postgres databases
如下链接所述,您可以使用 psql 命令恢复转储文件:
https://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE
psql dbname < infile
如果您需要设置用户名,只需在命令后添加用户名,例如:
psql dbname < infile username
尝试查看以下命令是否可以帮助您:
sudo su - yourdbuser
psql
\i yourbackupfile
对不起,necropost,但这些解决方案对我不起作用。我在 postgres 10 上。在 Linux 上:
我不得不将目录更改为我的 pg_hba.conf。我必须编辑文件以将方法从 peer 更改为 md5,如此处所述重新启动服务:service postgresql-10 restart 将目录更改为我的 backup.sql 所在的位置并执行:psql postgres -d database_name -1 -f backup.sql -database_name 是我的数据库的名称 -backup.sql 是我的 .sql 备份文件的名称。
无密码提示的最短路径
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"
我在运行 pg_dump 时遇到了身份验证问题,所以我移动了我的转储文件
mv database_dump /tmp
进入临时目录,然后运行
su -u postgres
cd /tmp
pg_restore database_dump
如果您有一个大型数据库转储,您可能只想创建另一个目录,您的当前用户和 postgres 用户可以访问该目录并将数据库转储文件放入其中。
如果您有备份 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 完成其工作。然后您可以检查还原过程。
备份==>
选项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
此解决方案仅适用于 Windows。
首先,确保您已经将 postgres bin 文件夹添加到“路径”环境变量中(在我的例子中,这个文件夹是 C:\Program Files\PostgreSQL\12\bin)。
然后,打开 Windows 命令解释器 (cmd),转到您拥有 .sql 文件的文件夹并执行以下命令:
pg_restore -U 用户名 -d database-1 backupfile.sql
例如:
pg_restore -U sam -d SamDataBase -1 SamDataBaseBackup.sql
(它可以要求您输入用户的密码,因此请确保输入正确,然后单击输入)
普拉维达!
如果您创建了一个名为 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)
如果要备份数据或从备份中恢复数据,可以运行以下命令:
要创建数据备份,请转到您的 postgres \bin\ 目录,例如 C:\programfiles\postgres\10\bin\,然后键入以下命令:pg_dump -FC -U ngb -d ngb -p 5432 >C:\ BACK_UP\ngb.090718_after_readUpload.backup 要从备份中恢复数据,请转到您的 postgres\bin\ 目录,例如 C:\programfiles\postgres\10\bin\,然后键入以下命令:C:\programFiles\postgres\10\bin > pg_restore -Fc -U ngb -d ngb -p 5432
请遵循以下 3 个步骤:
启动 postgres 服务器 - sudo systemctl start postgresql enable same - sudo systemctl enable postgresql restore 命令 - 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
见下面的例子它的工作
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"
-d
和-f
。pg_restore: options -d/--dbname and -f/--file cannot be used together
cannot be used together
,请参见此处:stackoverflow.com/questions/27882070/…