赞
踩
1、PG相对于MYSQL的优势
2、MySQL相对于PG的优势
下载官网https://www.postgresql.org/download/,可选版本,复制脚本进行脚本一键安装即可,rocky8自带10版本,ubuntu2004自带12版本,端口使用5432
默认安装路径在/var/lib/postgresql下
ubuntu安装完成后需进行数据库初始化安装,即创建相关数据库文件
#12表示版本,其他版本按需选择
#方法1
#初始化并启动
pg_crearecluster 12 main --start
#方法2
su - postgres
/usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/data
#启动服务-l 指定日志文件logfile
/usr/lib/postgresql/12/bin/pg_ctl -D /var/lib/postgresql/data -l logfile start
#环境准备 #关闭防火墙和SELINUX #内核参数优化 vim /etc/sysctl.conf sysctl -p #vim /etc/security/limits.conf #安装依赖包 #yum gcc make readline-devel zlib-devel #apt apt update gcc make libreadline-dev zlib1g-dev #源码准备,以14.2版本为例 wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz tar xf postgresql-14.2.tar.gz cd postgresql-14.2 #该文件可查看具体编译安装启动步骤帮助 cat postgresql-14.2/INSTALL #查看编译选项 pg_config --configure #编译安装 . /configure --prefis=/apps/pgsql #指定程序安装路径 make -j 2 world #编译源码的同时也编译安装相关的帮助文档及其他模块 make install-world #编译源码的同时也编译安装相关的帮助文档及其他模块 #必须创建一个操作系统的普通账号来用于启动服务,且在进行初始化操作时使用该账号来默认作为管理员账号 #ubuntu默认不创建家目录,可-m来创建,且-s指定shell类型,centos和ubuntu通用指令 useradd -s /bin/bash -m -d /home/postgres postgres echo -e '123456\n123456' | passwd postgres #初始化数据库的目录 mkdir -pv /pgsql/data/ chown postgres. /pgsql/data/ #设置环境变量,免于写路径,减少麻烦 vim /etc/profile.d/pgsql.sh export PGHOME=/apps/pgsql #程序安装路径 export PATH=$PGHOME/bin/:$PATH #二进制程序路径 export PGDATA=/pgsql/data #初始化数据库的数据存放路径 export PGUSER=postgres #启动账号 export MANPATH=/apps/pgsql/share/man:$MANPATH #man帮助 which initdb #检查 #初始化 su - postgres initdb #启动,指定日志文件 pg_ctl -l logfile start #添加自启动 #方法1 #将程序自带的启动脚本拷贝到操作系统的启动目录下 cp postgresql-14.2/contrib/start-scripts/linux /etc/init.d/postgresql chmod +x /etc/init.d/postgresql chkconfig --add postgresql #需更改启动脚本中的选项 vim /etc/init.d/postgresql prefix=/apps/pgsql PGDATA="/pgsql/data" #将其写进rc.local 二选一 /etc/init.d/postgresql start su - postgresql -c "/apps/pgsql/bin/pg_ctl -l logfile start" #方法2 #创建新的service文件 cat > /lib/systemd/system/postgresql.service <<EOF [Unit] Description=PostgreSQL database server After=network.target [Service] User=postgres Group=postgres Execstart=/apps/pgsql/bin/postmaster -D /pgsql/data ExecReload=/bin/kill -HUP [Install] WantedBy=multi-user.target EOF systemct1 daemon-reload systemctl enable --now postgresql.service
需切换到postgresql的专属账号,可跟选项start、stop、restart、reload、status、promote、kill…
chown postgres. /pgsql/
su - postgres
initdb [数据库路径] #数据库初始化方法1
pg_ctl init -D /pgsql/data2 #数据库初始化方法2
vim /pgsql/data2/postgresql.conf
port = 5433 #需更改端口号,避免冲突
/apps/pgsql/bin/pg_ctl -D /pgsql/data2 start
\? #列出psql命令帮助 \h #列出sql命令帮助 \l #列出数据库列表 \l+ #增强版的\l。显示更多,如大小,表空间 \du #查看所有用户 也可用\dg \dn #列出所分类的列表schemas模式 \df #显示用户自定义的函数 \dfS #显示所有系统函数 \dS #显示系统表 \db #显示表空间大小 \c #当前所在的数据库,也可当做是mysql的use,用于切换数据库 /conninfo #增强版的\c,可列出通过什么方式连接或连接的哪里 \d #列出当前数据库中的所有值,视图、索引、表 \dt[+] #只列出当前数据库里的表 \i #登录状态下调用文件,相当于source \z #显示表,视图,序列的权限分配情况 \x #查看的格式开关,打开之后所有的查询结果以竖向显示,相当于mysql的\G \timing on #开启执行命令所花费的时间显示,关闭用off \set VERBOSITY verbose #开启错误提示 \set #查看系统环境,变量
#远程连接到10.0.0.200的postgresql数据库,连接端口5432,需指定连接的数据库testdb和以哪个用户postgres连接
psql -h 10.0.0.200 -p 5432 testdb -U postgres
#默认不支持远程登录
#
psql -f /opt/test.sql #调用文件中的sql指令来执行
ll /pgsql/data/ #在初始化数据库的数据存放目录下
postgresql.conf #数据库实例的主配置文件,基本上所有的配置参数都在此文件中。等价于/etc/mysql/my.conf
pg_hba.conf #基于主机认证配置文件,配置了允许哪些IP的主机访问数据库,认证的方法是什么等信息。
pg_ident.conf #认证方式ident的用户映射文件,主要就是ident的认证方式,可在pg_hba.conf文件中更改
#添加密码,登录状态下更改
[root@rocky8 ~]#psql
postgres=# ALTER USER postgres with password '123456';
#更改配置文件,更改监听端口
vim /pgsql/data/postgresql.conf
listen_addresses = '0.0.0.0' #取消注释,更改值
vim /pgsql/data/pg_hba.conf
#重启
pg_ctl restart
psql -h 10.0.0.200 -p 5432 testdb -U postgres
cat /pgsql/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
#下面的每一行就是授权连接的每一条记录
# IPv4
# IPv6
host all all 10.0.0.0 md5 #远程10网段可登录连接
#利用.pgpass文件
vim .pgpass
10.0.0.200:5432:db1:postgres:123456
#连接主机ip:端口号:所需连接的数据库:用户名:密码,,,,中间用:隔开
chmod 600 .pgpass
#再用户postgres远程连接10.0.0.200上的数据库db1时可不用再敲密码
可以分为五层:
实例:一个postsql对应安装的数据目录$PGDATA,即一个instance实例
数据库:一个postgresql数据库服务下可以管理多个数据库,当应用连接到一个数据库时,一般只能访问这个数据库中的数据
模式:一个数据库可以创建多个不同的名称空间Schema,用于分隔不同的业务数据
表和索引:一个数据库可以有多个表和索引,在postgressql中的术语为Relation,在其他数据库叫Table
行和列:每张表有很多列和行数据,在postgresql的术语Tuple,在其他数据库叫Row数据库管理
createdb #相当于create database
#在主机200上创建数据库db2,需输入密码不用分号结尾
createdb -h 10.0.0.200 -U postgres db2
drop database db2;
#列出全部的表 select * from pg_tables; #路经在/var/lib/***/data下的base里,版本不同,***路径不同,图片为14版本 #查看存放目录下文件oid编号所对应的数据库 [postgres@centos8 ~]#psql select oid,datname from pg_database; #自带的pg_database表存放的是所有数据库的源数据信息 #oid是临时性的,只在生命周期内有效,例如表删除后该oid可给新创建的表来使用 #查看当前数据库中的所有表的信息 select * from pg_stat_all_tables; select * from pg_stat_all_tables where relname='tb1'; #查看表tb1的信息 #可直接查看表tb1的文件路径 select * from pg_relation_filepath('tb1');
同一个表名或其他例如函数、数据类型等可以在不同的模式中使用而不会冲突,例如schema1和schema2可以都存在一个名为test的表
默认在public中
#创建名为wei的schema模式分类
create schema wei;
#列出所有schema模式分类
\dn
#新建表归类到wei类别中
create table wei.students(id int);
#serial自动增长,primary key主键,text文本形式 create table tb1 (id serial primary key,name text); #在表tb1中的name列上添加9条随机字符,函数generate_series可生成数字序列2到10,select (md5(random()::text))生成随机数并进行md5运算然后识别成文本形式 insert into tb1 (name) select (md5(random()::text)) from generate_series (2,10); #创建表tb2,用的是tb1的结构,不带tb1的数据 create table tb2 ( like tb1 ); #查看表结构 \d tb1 #删除表 drop table tb2; postgres=# create table tb1 (id serial primary key,name text); CREATE TABLE postgres=# insert into tb1 (name) select (md5(random()::text)) from generate_series (2,10); INSERT 0 9 postgres=# select * from tb1; id | name ----+---------------------------------- 1 | 1c07360f404f9fce29fa5ebe9ef4f7f0 2 | 99cd31c83719d5bd046e91232155d2fe 3 | de0bd26b70e2a54708dee02522479aab 4 | af5178d1653fde1fe5f858477c1cf51c 5 | 37e37fd08037c7dbadb9c22666e9a9a0 6 | 7667fe3282810fac7de9fb76c036dc0d 7 | 04a629789db088783b860e0568f7545d 8 | 8eddab7438d2e039d3ef07f42518e821 9 | 3a6e275e59952a6a150a9fed1483b06c (9 rows) postgres=# \d tb1 Table "public.tb1" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------------------------------- id | integer | | not null | nextval('tb1_id_seq'::regclass) name | text | | | Indexes: "tb1_pkey" PRIMARY KEY, btree (id)
#查看所有函数
\dfS+
#函数generate_series可生成数字序列
select generate_series (2,10);
#当前时间
select clock_timestamp();
#查看客户端哪个远程主机,哪个端口
inet_client_addr(),inet_client_port();
#服务器端
inet_server_addr(),inet_server_port();
into选项不可省略
留意要加from选项
truncate tb1; #清空tb1表
#在表tb1的id列上创建索引 create index idx_tb1_id on tb1(id); #可查看索引信息 \d tb1 #查询是否使用索引explain explain analyze select * from tb1 where id = 500; #临时关闭索引 set enable_indexscan=off; #关闭位图索引 set enable_bitmapscan=off; #删除索引,不用指表名,因此留意索引名唯一 drop index idx_tb1_id;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。