什么是postgreSQL
PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可以追溯到1986年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上进行了30多年的积极开发。
PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。PostgreSQL在所有主要操作系统开始使用PostgreSQL从未如此简单。
为什么要使用PostgreSQL
PostgreSql提供了许多功能,旨在帮助开发人员构建应用程序,管理员保护数据完整性并且构建容错环境,并帮助你管理数据,无论数据集的大小。除了免费和开源之外,Postgre SQL还具有高度的可扩展性。例如,你可以定义自己的数据类型,构建自定义SQL函数(此sql函数在另一篇帖子讨论:点此跳转),甚至可以编写来自不同编程语言的代码,而不需要重新编译数据库。
PostgreSql试图符合SQL标准,在这种标准中,这种一致性不会与传统特性相矛盾,或者可能导致糟糕的架构决策。支持SQL标准所需的许多功能,但是有时候语法或者功能略有不同。随着时间的推移,可以预期进一步向一致性迈进。从2018年10月发布的11版本开始,PostgreSQL符合SQL:2011核心一致性的179个强制性功能中的至少160个,在此之前,没有任何关系型数据库符合此标准的完全符合。
PostgreSQL vs MySQL:有什么区别?
PostgreSQL 和 MySQL 之间有很多不同之处。特性、功能和优势方面的一些差异如下:
- 数据库类型
- MySQL:关系型
- PostgreSQL:对象关系
- 编程语言
- MySQL: C/C++
- PostgreSQL: C
- 支持级联
- MySQL:没有
- PostgreSQL:是的
- 用户界面
- MySQL:工作台 GUI
- PostgreSQL: PgAdmin
- 支持的过程复杂度
- MySQL: SQL 语法和存储过程
- PostgreSQL:高级过程和存储过程
- 支持的索引类型
- MySQL:二叉搜索树(B-Tree)
- PostgreSQL:很多,包括 GIN 和 Hash
- 客户端和服务器之间的加密
- MySQL:传输层安全 (TLS) 协议
- PostgreSQL: SSL
- XML 数据类型支持
- MySQL:没有
- PostgreSQL:是的
- 支持物化视图和表继承
- MySQL:没有
- PostgreSQL:是的
- 支持高级数据类型
- MySQL:没有
- PostgreSQL:是的——hstore 和用户定义的 tdtaa
- 支持多版本并发控制 (MVCC)
- MySQL:没有
- PostgreSQL:是的
总之,PostgreSQL 和 MySQL 都有不同的用途,它们之间的选择取决于企业目标和资源。一般来说,PostgreSQL 是一个更强大、更高级的数据库管理系统,非常适合需要在大型环境中快速执行复杂查询的组织。但是,对于预算和空间更受限制的公司来说,MySQL 是一个理想的解决方案。
部署:
下载地址:sql
安装依赖
#安装依赖
[root@bogon ~]# yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake
解压安装包并安装
[root@bogon ~]# tar -zxvf postgresql-15.2.tar.gz
[root@bogon ~]# mv postgresql-15.2 /usr/src/
[root@bogon ~]# cd /usr/src/postgresql-15.2/
[root@bogon postgresql-15.2]# ./configure --prefix=/usr/local/postgresql
[root@bogon postgresql-15.2]# make && make install
[root@bogon postgresql-15.2]# cd /usr/local/postgresql/
[root@bogon postgresql]# ls
bin include lib share
创建用户和组
[root@bogon postgresql]# groupadd postgres
[root@bogon postgresql]# useradd -g postgres postgres
[root@bogon postgresql]# id postgres
uid=1000(postgres) gid=1000(postgres) 组=1000(postgres)
创建postgresql数据库的数据主目录并修改文件所有者
[root@bogon postgresql]# cd
[root@bogon ~]# mkdir -p /postgresql/data
[root@bogon ~]# chown postgres:postgres /postgresql/data
配置环境变量
[root@bogon ~]# cd /home/postgres
[root@bogon postgres]# ls -al
总用量 12
drwx------ 2 postgres postgres 62 4月 23 09:55 .
drwxr-xr-x. 3 root root 22 4月 23 09:55 ..
-rw-r--r-- 1 postgres postgres 18 4月 1 2020 .bash_logout
-rw-r--r-- 1 postgres postgres 193 4月 1 2020 .bash_profile
-rw-r--r-- 1 postgres postgres 231 4月 1 2020 .bashrc
[root@bogon postgres]# vi .bash_profile
#最后添加
export PGHOME=/usr/local/postgresql
export PGDATA=/postgresql/data
PATH=$PATH:$HOME/bin:$PGHOME/bin
[root@bogon postgres]# source .bash_profile
切换用户到postgres并使用initdb初使用化数据库
[root@bogon postgres]# su - postgres
[postgres@bogon ~]$ initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "zh_CN.UTF-8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8"
The default text search configuration will be set to "simple".
Data page checksums are disabled.
fixing permissions on existing directory /postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /postgresql/data -l logfile start
[postgres@bogon ~]$ cd /postgresql/data/
[postgres@bogon data]$ ls
base pg_hba.conf pg_notify pg_stat pg_twophase postgresql.auto.conf
global pg_ident.conf pg_replslot pg_stat_tmp PG_VERSION postgresql.conf
pg_commit_ts pg_logical pg_serial pg_subtrans pg_wal
pg_dynshmem pg_multixact pg_snapshots pg_tblspc pg_xact
配置服务
修改/pgsql/postgresql/data目录下的两个文件
postgresql.conf 配置PostgreSQL数据库服务器的相应的参数。
pg_hba.conf 配置对数据库的访问权限。
[postgres@bogon data]$ vim postgresql.conf
#找到listen_addresses
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)
[postgres@bogon data]$ vim pg_hba.conf
#在最下面找到
# IPv4 local connections:
#将这行加进去,这样局域网的人才能访问。下面那行的默认就有。
host all all 0.0.0.0/0 trust
host all all 127.0.0.1/32 trust
设置PostgreSQL开机自启动
PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下。
linux文件即为linux系统上的启动脚本
[postgres@bogon contrib]$ cd /usr/src/postgresql-15.2/contrib/start-scripts/
[postgres@bogon start-scripts]$ ls
freebsd linux macos
#切换至root用户授权
[root@bogon start-scripts]# chmod a+x linux
#复制linux文件到/etc/init.d目录下,更名为postgresql
[root@bogon start-scripts]# cp linux /etc/init.d/postgresql
#修改/etc/init.d/postgresql文件的两个变量
[root@bogon ~]# vim /etc/init.d/postgresql
# Installation prefix
prefix=/usr/local/postgresql/
# Data directory
PGDATA="/postgresql/data/"
[root@bogon ~]# chkconfig --add postgresql
[root@bogon ~]# chkconfig
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
postgresql 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@bogon ~]#
开启postgresql
[root@bogon ~]# systemctl start postgresql.service
[root@bogon ~]# systemctl status postgresql.service
● postgresql.service - SYSV: PostgreSQL RDBMS
Loaded: loaded (/etc/rc.d/init.d/postgresql; bad; vendor preset: disabled)
Active: active (exited) since 日 2023-04-23 10:21:51 CST; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 21031 ExecStart=/etc/rc.d/init.d/postgresql start (code=exited, status=0/SUCCESS)
4月 23 10:21:51 bogon systemd[1]: Starting SYSV: PostgreSQL RDBMS...
4月 23 10:21:51 bogon su[21032]: (to postgres) root on none
4月 23 10:21:51 bogon systemd[1]: Started SYSV: PostgreSQL RDBMS.
4月 23 10:21:51 bogon postgresql[21031]: Starting PostgreSQL: ok
或者用这个
[root@bogon ~]# service postgresql start
Starting PostgreSQL: ok
开始测试
[root@bogon ~]# su - postgres
上一次登录:日 4月 23 10:22:58 CST 2023pts/0 上
[postgres@bogon ~]$ psql
psql (15.2)
Type "help" for help.
postgres=#
postgres-# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access
privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+---------
--------------
postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc |
template0 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc | =c/postg
res +
| | | | | | | postgres
=CTc/postgres
template1 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc | =c/postg
res +
| | | | | | | postgres
=CTc/postgres
(3 rows)
创建用户
postgres=# create user lyh password 'lyh';
CREATE ROLE
postgres=# alter role lyh superuser;
ALTER ROLE
postgres=# create database lyh;
CREATE DATABASE
postgres=# \q
#重新登录数据库
[postgres@bogon ~]$ psql -U lyh -d lyh
psql (15.2)
Type "help" for help.
lyh=#
lyh=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access
privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+---------
--------------
lyh | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc |
postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc |
template0 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc | =c/postg
res +
| | | | | | | postgres
=CTc/postgres
template1 | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | libc | =c/postg
res +
| | | | | | | postgres
=CTc/postgres
(4 rows)
lyh=#