postgresql数据库的导入和导出,备份/恢复

切换到postgres用户

su postgres

执行psql

创建数据库

CREATE USER 用户名 WITH PASSWORD ‘*****’;create database [数据库名];或者create database [数据库名] owner [用户名];

导入整个数据库
-W 输入密码 -p 指定端口号

psql -U postgres(用户名) 数据库名(缺省时同用户名) < /data/dum.sql

psql 数据库名 < /data/dum.sql

导入出现错误psql: FATAL: Peer authentication failed for user “postgres”
修改 vim /var/lib/pgsql/9.6/data/pg_hba.conf文件中

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
-----------------------------------------------------------------------------------------------
修改为:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust

重启数据库服务;如果不管用重启 reboot

导出整个数据库
-O 忽略所属用户 -p 指定端口号
pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名) >/data/dum.sql
pg_dump 数据库名 >/data/dum.sql

导出某个表

pg_dump -h localhost -U postgres(用户名) -t table(表名) 数据库名(缺省时同用户名) > /data/dum.sql

压缩方法

一般用dump导出数据会比较大,推荐使用xz压缩

压缩方法 xz dum.sql 会生成 dum.sql.xz 的文件

xz压缩数据倒数数据库方法

xzcat /data/dum.sql.xz | psql -h localhost -U postgres(用户名) 数据库名(缺省时同用户名)

使用pg_dumpall
pg_dump只备份数据库集群中的某个数据库的数据,它不会导出角色和表空间相关的信息。pg_dumpall则可以导出整个数据库集群中所有的数据库中的数据,同时也会导出角色、用户和表空间的定义信息。使用pg_dumpall的一般命令格式如下:

pg_dumpall > backup_file

pg_dumpall也支持和pg_dump一样的命令行选项,如-h和-p等。同样可以使用psql来从pg_dumpall创建的备份文件中恢复数据库。应该使用数据库超级用户来进行恢复数据库的操作。命令格式如下:

psql -f backup_file postgres

pg_dumpall在执行的过程中,用postgres作为用户名来连接数据库。系统自动创建的数据库postgres中的内容也会被导出来,数据库template0和template1中的内容不会被导出来。

在删除数据库 DROP DATABASE testdb; 的时候可能会出现:

ERROR:  database "testdb" is being accessed by other users
DETAIL:  There are 3 other sessions using the database.

断开连接这个数据库的所有连接,在删除数据库

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='testdb' AND pid<>pg_backend_pid();

pg_terminate_backend:用来终止与数据库的连接的进程id的函数。
pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。
pg_backend_pid():是一个系统函数,获取附加到当前会话的服务器进程的ID。

你可能感兴趣的:(python)