【数据库】PostgreSQL数据库入门(一)
PostgreSQL是一款开源的关系型数据库,其具有丰富的数据类型和强大的SQL编程能力,同时还支持存储非关系型数据。1. 安装与配置本次安装环境是centos7,PostgreSQL数据库版本是12。Debian系Linux发行版可以使用APT直接安装。安装仓库源:yum install -y https://download.postgresql.org/pub/repos/yum/repor
PostgreSQL是一款开源的关系型数据库,其具有丰富的数据类型和强大的SQL编程能力,同时还支持存储非关系型数据。
1. 安装与配置
本次安装环境是centos7,PostgreSQL数据库版本是12。Debian系Linux发行版可以使用APT直接安装。
- 安装仓库源:
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
- 安装PostgreSQL客户端、服务端程序:
yum install -y postgresql12 postgresql12-server
- 初始化数据库:
/usr/pgsql-12/bin/postgresql-12-setup initdb
- 更改配置,以保证客户端正确连接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
- 修改
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:
- PostgreSQL默认使用的是
5432
端口,需对5432
端口或者postgresql
服务进行放通。以下两条命令执行任意一条即可
firewall-cmd --add-service=postgresql
firewall-cmd --add-port=5432
- 使用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.使用示例
- 创建数据表。
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);
- 使用
\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)
- 插入数据。
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');
- 由于数据较长,我们可以使用
\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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)