【数据库】PostgreSQL数据库入门(一)

PostgreSQL是一款开源的关系型数据库,其具有丰富的数据类型和强大的SQL编程能力,同时还支持存储非关系型数据。

1. 安装与配置

本次安装环境是centos7,PostgreSQL数据库版本是12。Debian系Linux发行版可以使用APT直接安装。

  1. 安装仓库源:yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  2. 安装PostgreSQL客户端、服务端程序:yum install -y postgresql12 postgresql12-server
  3. 初始化数据库:/usr/pgsql-12/bin/postgresql-12-setup initdb
  4. 更改配置,以保证客户端正确连接PostgreSQL服务器。
# 在/var/lib/pgsql/12/data/postgresql.conf中追加以下配置,保证服务端可以监听任意主机。
listen_addresses = '*'
# 在/var/lib/pgsql/12/data/pg_hba.conf中追加以下配置,允许任意ip远程客户端进行访问,访问验证方式为密码验证
host  all     all           0.0.0.0/0            password
  1. 修改postgres用户密码,或创建新用户用于连接数据库。在安装PostgreSQL数据库过程中,安装程序会自动创建postgres用户作为默认数据库管理员,如果想使用postgres用户进行登录,需要对其密码进行修改,操作步骤如下:
# 1.在root用户shell下执行su - postgres切换到postgres用户shell
[root@localhost ~]# su - postgres
Last login: Mon Jun 22 16:30:45 CST 2020 on pts/0
-bash-4.2$ 

# 2. 执行psql进入PostgreSQL CLI
-bash-4.2$ psql
psql (12.3)
Type "help" for help.
postgres=# 

# 3. 完成密码更改(需要进行密码确认)
postgres=# \password postgres
Enter new password: 
Enter it again:
  1. PostgreSQL默认使用的是5432端口,需对5432 端口或者postgresql服务进行放通。以下两条命令执行任意一条即可
firewall-cmd --add-service=postgresql
firewall-cmd --add-port=5432
  1. 使用navicat进行数据库连接。只需填入连接名、主机、密码信息即可。
    在这里插入图片描述

2. PostgreSQL整体架构

在这里插入图片描述
Postgres数据库依靠多个线程进程来维持整个数据库生态。
postmaster进程是PostgreSQL的主控,用于开启或者关闭数据库实例。
logger进程记录数据库系统产生的日志。
checkpointer进程负责记录检查点,方便进行数据库冗灾和恢复。
background writer进程负责将客户端执行的数据库操作产生的数据改动写入文件中。
wal writer进程负责记录WAL(Write Ahead Log)日志,记录数据库修改操作,这样就使得不用实时将数据写入数据库,从而减轻数据库压力。
autovacuum launcher负责清理delete后的数据。
stats collector负责统计数据收集。

3. PostgreSQL常用数据类型

类型 名称 描述
数值类型 smallint、integer、bigint、decimal、numeric、real、double 用于描述数值
自增数值类型 serial、bigserial 常用于主键自增,bigserial范围更大
金钱数值类型 money 解决浮点数不精确问题,直接表示金钱数量
布尔类型 boolean 取值范围为true,false
时间类型 time、date、timestamp、interval timestamp可以表示完整时间
字符类型 char、varchar、text 用于描述字符串,字符串需要转义可以使用E’text\ttext2’格式,可以直接使用单引号对单引号进行转义
网络类型 inet、cidr、macaddr 分别用于描述IP、无类别域间路由及物理mac地址
图形类型 point、line、lseg、box、path、polygon、circle 图形参数描述
JSON类型 json、jsonb 分别用于描述json和二进制json数据
Bytea类型 bytea 二进制数据,可以存放二进制资源文件

4.使用示例

  1. 创建数据表。
create table tb_user (                    
	id serial primary key,
	name varchar(32),
	gender boolean comment 'true:male,false:female',
	balance money,
	cr_time timestamp,
	ip_addr cidr,
	mac_addr macaddr);
  1. 使用\d tb_user查看数据表结构。
postgres=# \d tb_user;
                                       Table "public.tb_user"
  Column  |            Type             | Collation | Nullable |               Default               
----------+-----------------------------+-----------+----------+-------------------------------------
 id       | integer                     |           | not null | nextval('tb_user_id_seq'::regclass)
 name     | character varying(32)       |           |          | 
 gender   | boolean                     |           |          | 
 balance  | money                       |           |          | 
 cr_time  | timestamp without time zone |           |          | 
 ip_addr  | inet                        |           |          | 
 mac_addr | macaddr                     |           |          | 
Indexes:
    "tb_user_pkey" PRIMARY KEY, btree (id)
  1. 插入数据。
insert into tb_user(name, gender, balance, cr_time, ip_addr, mac_addr) values('zhangsan', false, 7731, now(), '192.168.1.10', '2A:3B:4C:5E:6E:7F');
  1. 由于数据较长,我们可以使用\x命令打开扩展视图,并尝试执行查询。
postgres=# \x
Expanded display is on.
postgres=# select * from tb_user where cr_time>now() - interval '10h';
-[ RECORD 1 ]------------------------
id       | 1
name     | huangwei
gender   | t
balance  | $3,604.00
cr_time  | 2020-06-22 00:22:52.376134
ip_addr  | 192.168.1.1
mac_addr | 2a:3b:4c:5d:6e:7f
-[ RECORD 2 ]------------------------
id       | 2
name     | zhangsan
gender   | f
balance  | $7,731.00
cr_time  | 2020-06-22 01:14:25.743003
ip_addr  | 192.168.1.10
mac_addr | 2a:3b:4c:5e:6e:7f
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章