PostgreSQL

背景

  • 描述:人力题库数据库即将下线,需要保存数据副本到本地数据库。
  • 源库PostgreSQL 9.2.8
  • 目标库10.133.0.52 / PostgreSQL 11.5
迁移表 说明 数据量 状态
t_ems_base 题库 3139 OK
t_ems_base_category 题库类别 164 OK
t_ems_item 试题 500378 OK
t_ems_item_option 试题选项 1250290 OK
t_ems_paper 试卷 3262 OK
t_ems_paper_item_rel 试卷试题 1920540 OK
t_ems_info 考试 36229 OK
t_ems_result 考试成绩 1052490 OK
t_ems_result_detail 考试答题详情 69602800

PostgreSQL

简介

PostgreSQL 是一个免费的对象-关系数据库服务 (ORDBMS),ORDBMS 面向对象数据库管理系统,将所有实体都看着对象,并将这些对象类进行封装,对象之间的通信通过消息,ORDBMS 对象关系数据库在实质上还是关系数据库 。

安装

  • 操作系统:CentOS Linux release 7.4.1708 (Core)
  • 安装版本:PostgreSQL 11
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 下载rpm包
yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm -y

# 安装
yum -y install postgresql11 postgresql11-server postgresql11-libs

# 初始化数据库
/usr/pgsql-11/bin/postgresql-11-setup initdb # /usr/pgsql-11/bin/initdb -D /data/postgresql

# 设置开机自启动PostgreSQL和启动服务
systemctl enable postgresql-11
systemctl start postgresql-11
systemctl status postgresql-11

● postgresql-11.service - PostgreSQL 11 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disablesd)
Active: active (running) since 三 2019-11-13 10:11:05 CST; 6s ago
Docs: https://www.postgresql.org/docs/11/static/
Process: 84380 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 84386 (postmaster)
CGroup: /system.slice/postgresql-11.service
├─84386 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
├─84388 postgres: logger
├─84390 postgres: checkpointer
├─84391 postgres: background writer
├─84392 postgres: walwriter
├─84393 postgres: autovacuum launcher
├─84394 postgres: stats collector
├─84395 postgres: logical replication launcher
└─84417 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/

# 修改数据存储目录
systemctl stop postgresql-11
mkdir /data/postgresql
chown -R postgres:postgres postgresql
chmod 700 /data/postgresql
vi /data/postgresql/postgresql.conf # data_directory = '/data/postgresql'
vi /usr/lib/systemd/system/postgresql-11.service # Environment=PGDATA=/data/postgresql
systemctl restart postgresql-11

$ su - postgres
-bash-4.2$ psql
postgres=# show data_directory;
data_directory
------------------
/data/postgresql

后台登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ su - postgres
-bash-4.2$ psql
psql (11.5)
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit

# 配置Navicate可登录 <postgres/Haier@123>
# pg_hba.conf:配置对数据库的访问权限
# postgresql.conf:配置PostgreSQL数据库服务器的相应的参数

vi /data/postgresql/postgresql.conf # listen_addresses = '*'
vi /data/postgresql/pg_hba.conf # 文件末尾添加 host all all 0.0.0.0/0 trust

# 开启防火墙5432端口
firewall-cmd --zone=public --add-port=5432/tcp --permanent # 永久生效再加上 permanent
firewall-cmd --reload # 更新防火墙规则
firewall-cmd --zone=public --list-ports

# 修改登录密码
sudo -u postgres psql
ALTER USER postgres WITH password 'Haier@123';

客户端登录

  • 安装 Navicate
  • 登录数据库
    • 主机:10.133.0.52
    • 端口:5432
    • 数据库:postgres
    • 用户名:postgres
    • 密码:Haier@123

日常运维

  • 登录数据库
1
psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432
  • 创建账号和数据库
1
2
3
CREATE USER dbuser WITH PASSWORD 'password';
CREATE DATABASE exampledb OWNER dbuser;
GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
  • 控制台命令

“postgres=#”,表示这时已经进入了数据库控制台,除了 \q 命令(退出)以外,控制台还提供一系列其他命令:

1
2
3
4
5
6
7
8
9
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。
  • 数据库操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 创建新表
CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);

# 插入数据
INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');

# 选择记录
SELECT * FROM user_tbl;

# 更新数据
UPDATE user_tbl set name = '李四' WHERE name = '张三';

# 删除记录
DELETE FROM user_tbl WHERE name = '李四' ;

# 添加栏位
ALTER TABLE user_tbl ADD email VARCHAR(40);

# 更新结构
ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;

# 更名栏位
ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;

# 删除栏位
ALTER TABLE user_tbl DROP COLUMN email;

# 表格更名
ALTER TABLE user_tbl RENAME TO backup_tbl;

# 删除表格
DROP TABLE IF EXISTS backup_tbl;
  • 数据迁移

PostgreSQL 9

1
2
3
4
5
6
7
8
9
yum install postgresql-server postgresql-contrib
postgresql-setup initdb

vi /var/lib/pgsql/data/pg_hba.conf ## host all all 0.0.0.0/0 md5
vi /var/lib/pgsql/data/postgresql.conf ## listen_addresses='*'

systemctl start postgresql
systemctl enable postgresql
systemctl status postgresql