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。
更多推荐
所有评论(0)