postgresql终端命令和postgersql数据库的备份

postgresql终端命令

  • postgres安装完成后,会自动在操作系统和postgres数据库中分别创建一个名为postgres的用户以及一个同样名为postgres的数据库
  • 安装好postgresql数据库之后进入psql shell
    • windows下 终端一般是默认在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\PostgreSQL 9.6这个目录下的.
    • ubuntu是输入命令进入终端
      • su - postgres psql
    • centos也是输入命令进入终端
      • su - postgres
      • psql

shell下一些常用的命令

  • 连接数据库,默认的用户和数据库时postgres
  • 切换数据库,相当于mysql的use dbname
    • \c dbname
  • 列出数据库,相当于mysql的show databases
    • \l
  • 列举表,相当于mysql的show tables
    • \dt
  • 查看表结构, 相当于desc tblname,show columns from tbname
    • \d tblname
  • \di 查看索引
  • 数据库相关操作
# 创建用户
create user "odoo" with password 'odoo' createdb;(创建odoo数据库用户)
createdb表示的是赋予这个用户创建数据库的权限
也可以用alert user "xxx" createdb;

# 创建数据库
create database [数据库名称];
create database testdb;

# 创建数据库并指定拥有者
create database testdb with owner = "zhangps";

# 删除数据库
drop database [数据库名称];
DROP(drop) DATABASE testdb;

# 重命名一个表
alter table [表名A] rename to [表名B];

# 删除一个表
drop table [表名];

# 更改数据库的拥有者
alter database adempiere owner to adempiere; 

# 更改数据库的名称
alter database testa rename to test;

  • 表的相关操作
# 在已有的表里添加字段
alter table [表名] add column [字段名] [类型]; 

# 删除表中的字段
alter table [表名] drop column [字段名]; 

# 重命名一个字段  
alter table [表名] rename column [字段名A] to [字段名B]; 

# 给一个字段设置缺省值  
alter table [表名] alter column [字段名] set default [新的默认值];

# 去除缺省值
alter table [表名] alter column [字段名] drop default; 

# 在表中插入数据
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......); 

# 修改表中的某行某列的数据
update [表名] set [目标字段名]=[目标值] where [该行特征]; 

# 删除表中某行数据 
delete from [表名] where [该行特征]; 
delete from [表名];--删空整个表 

# 创建表: 
create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;); 

  • 其他
# 显示 PostgreSQL 的使用和发行条款
\copyright

# 显示或设定用户端字元编码
\encoding [字元编码名称]
 
# SQL 命令语法上的说明,用 * 显示全部命令
\h [名称]

# 提示用户设定内部变数
\prompt [文本] 名称
  
# securely change the password for a user               
\password [USERNAME]
                 
# 退出 psql
\q             

数据库的备份和迁移

  • Postgresql内置了不少的工具,备份恢复方案就在其中:pg_dump.exe psql.这两个指定都是在安装目录下, 比如我们本地安装(windows下)C:\Program Files\PostgreSQL\9.5\;然后进入到bin文件夹;
  • 备份和恢复数据库
# 备份数据库指令如下:
# 先进入到postgresql的安装目录的bin目录下执行如下命令
pg_dump -h 127.0.0.1 -U postgres databasename > C:\databasename.dump

# 指令解释
    # pg_dump 是备份数据库指令
    # 164.82.233.54是数据库的ip地址(必须保证数据库允许外部访问的权限),当然本地的数据库ip写localhost
    # 如果是云服务器系统,那么云服务器上也要开放相应的端口--->重要
    # postgres 是数据库的用户名
    # databasename 是数据库名
    # > 意思是导出到 C:\databasename.bak文件里,如果没有写路径,单单写databasename.bak文件名,那么备份文件会保存在 C: \Program Files\PostgreSQL\9.0\bin 文件夹里。


# 恢复数据库指令如下: 
psql -h localhost -U postgres -d databasename <  C:\databasename.bak(测试没有成功)

pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "symbolmcnew" --no-password  --verbose "databasename.backup"(测试成功)

# 指令解释
    # psql是恢复数据库命令
    # localhost是要恢复到哪个数据库的地址,当然你可以写上ip地址,也就是说能远程恢复(必须保证 数据库允许外部访问的权限)
    # postgres 就是要恢复到哪个数据库的用户
    # databasename 是要恢复到哪个数据库
    # < 的意思是把 C:\databasename.bak文件导入到指定的数据库里
    
  • linux下数据的备份和恢复
  • 备份数据的时候的用户,和恢复数据时候的用户可以不具有相同的权限.
# 备份
# 先找到并进入postgresql数据库安装的bin目录
/usr/PostgreSQL/9.5/bin/pg_dump -h 164.82.233.54 -U postgres databasename > databasename.dmp

# 恢复
/usr/PostgreSQL/9.5/bin/psql -h localhost -U postgres -d databasename < databasename.dmp

  • 另外的一种备份方法
# 先从192.168.122.1备份数据库osdba, 然后恢复到192.168.122.2机器上.
# 先找到并进入postgresql数据库安装的bin目录
# 必须要打开数据库外部访问权限
# 有些备份的时候, -Fc要放到前面 pg_restore中-C是创建数据库的指令
pg_dump -h 192.168.122.1 -U postgres osdba -Fc > osdba.dump
pg_restore -h 192.168.122.2 -U postgres -d postgres osdba.dump
# 在pg_restore命令中, -d中指定的数据库可以是192.168.122.2机器上实例中的任意数据库,pg_restore仅用
该数据库名称连接上去, 先执行CREATE DATABASE命令创建osdba数据库,然后再重新连接到osdba数据库,最后把
备份的表和其他对象建到osdba数据库中

  • postgresql打开外部访问权限

    • 修改pg_hba.conf文件
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    local   all             all             trust
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    host    all             all             0.0.0.0/0                md5
    # IPv6 local connections:
    host    all             all             ::1/128                 ident
    # Allow replication connections from localhost, by a user with the
    # replication privilege.
    #local   replication     postgres                                peer
    #host    replication     postgres        127.0.0.1/32            ident
    #host    replication     postgres        ::1/128                 ident
    
    
    • 修改postgresql.conf文件
    #------------------------------------------------------------------------------
    # CONNECTIONS AND AUTHENTICATION
    #------------------------------------------------------------------------------
    
    # - Connection Settings -
    
    listen_addresses = '*'                  # what IP address(es) to listen on;
                                            # comma-separated list of addresses;
                                            # defaults to 'localhost'; use '*' for all
                                            # (change requires restart)
    port = 5432                             # (change requires restart)
    max_connections = 100                   # (change requires restart)
    #superuser_reserved_connections = 3     # (change requires restart)
    #unix_socket_directories = '/var/run/postgresql, /tmp'  # comma-separated list of directories
                                            # (change requires restart)
    #unix_socket_group = ''                 # (change requires restart)
    
    
    • 如果是云服务器系统,还要在云服务器上添加安全组规则,打开相应的端口,然后打开本地的防火墙.把相应的端口添加进去.
    # centos系统下
    # 防火墙添加8069端口
    firewall-cmd --zone=public --add-port=8069/tcp --permanent
    firewall-cmd --reload
    # 查看是否生效
    firewall-cmd --list-all
    
    
  • 备份的其他的方法(测试成功)

# 将一个生产的的PostgreSQL数据库复制到开发服务器。

# 不需要创建中间件
# 这种备份的方法不需要去考虑备份和恢复的用户是超级管理员还是普通用户, 不用考虑权限问题
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
# 要么
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname

  • 其他的备份方法(未经过验证)
# pg_dump一次转储一个数据库,并且不转储用户角色和表空间。为了方便的转储数据库集群的全部内容,可以使用pg_dumpall

备份shell代码
pg_dumpall > outfile  
恢复shell代码
psql -f infile postgres  

# 恢复pg_dumpall的转储文件需要superuser用户,另外也要确认表空间的路径在新数据库中可用。
# pg_dumpall使用emitting命令重建角色、表空间和空数据库,然后对每个数据库使用pg_dump.这意味着虽然每个数据库内容会保持一致,但不同数据库的快照可能不完全同步

# 处理大数据库
1. 使用压缩

备份shell代码
pg_dump dbname | gzip > filename.gz
恢复shell代码
gunzip -c filename.gz | psql dbname  
或者
cat filename.gz | gunzip | psql dbname  

你可能感兴趣的:(odoo)