记录:359
场景:PostgreSQL数据库常用操作,创建用户、数据库、表、主键、索引、注释等。配置远程可连接、配置环境变量、常用命令行操作。表的增删改查等操作。
版本:
操作系统:CentOS 7.9
PostgreSQL版本:PostgreSQL 13.4
PostgreSQL帮助手册:
官网入口:https://www.postgresql.org/
文档入口:https://www.postgresql.org/docs
文档内容列表:https://www.postgresql.org/docs/current/
支持的命令列表:https://www.postgresql.org/docs/current/reference.html
psql命令行列表:https://www.postgresql.org/docs/current/app-psql.html
1.PostgreSQL数据库
1.1PostgreSQL
PostgreSQL: The World's Most Advanced Open Source Relational Database.
PostgreSQL is a powerful, open source object-relational database system that has earned it a strong reputation for reliability, feature robustness, and performance.
解析:PostgreSQL是一个先进的开源关系型数据库。在可靠性、健壮性和性能方面赢得很高声誉。
1.2PostgreSQL历史版本下载
(1)下载地址
官网地址:https://ftp.postgresql.org/pub/source/
解析:下载需求的各版本移步此网站。
(2)命令下载
命令下载:wget https://ftp.postgresql.org/pub/source/v13.4/postgresql-13.4.tar.gz --no-check-certificate
(3)页面下载
浏览器登录到下载页面,选择对应版本。
2.安装PostgreSQL
注意:从1.3步骤下载的包是源码包,需要编译后才能安装使用。PostgreSQL启动运行一般使用Linux操作系统的普通用户。
(1)解压
解压命令:tar -xzvf /home/apps/software/postgresql-13.4.tar.gz -C /home/apps/module
(2)编译和安装
操作目录:cd /home/apps/module/postgresql-13.4
编译命令:make -C /home/apps/module/postgresql-13.4
安装命令:make install PREFIX=/home/apps/module/postgresql
(3)数据目录
创建命令:mkdir -p /home/data/postgresql/data
(4)创建Linux普通用户
创建Linux用户:useradd postgres
(5)PostgreSQL安装目录和数据目录赋权给普通用户
PostgreSQL安装目录和数据目录,所有权修改为postgres用户。
安装目录赋权:chown -R postgres:postgres /home/apps/module/postgresql/
数据目录赋权:chown -R postgres:postgres /home/data/postgresql/data/
3.普通用户postgres切换
切换到普通用户:su postgres
退出普通用户:exit postgres
解析:postgres用户做所有关于PostgreSQL的操作包括启动、运行、登录数据库等操作。
4.环境变量配置
(1)配置环境变量
修改命令:vi /home/postgres/.bash_profile
修改内容:
PGHOME=/home/apps/module/postgresql
export PGHOME
PGDATA=/home/data/postgresql/data
export PGDATA
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
(2)环境变量生效
命令:source /home/postgres/.bash_profile
(3)环境变量开机启动生效配置
修改指令:vi /etc/profile
增加内容:source /home/postgres/.bash_profile
5.初始化PostgreSQL
命令:initdb
6.启动、重启和停止
启动命令:pg_ctl -D /home/data/postgresql/data -l /home/data/postgresql/data/postgres.log start
重启命令:pg_ctl -D /home/data/postgresql/data -l /home/data/postgresql/data/postgres.log restart
停止命令:pg_ctl stop
解析:-D,指定数据库数据存储目录;-l,指定日志输出目录。
7.登录PostgreSQL
本机登录不指定用户名和数据库名称,实际就是登录postgres,在postgres用户超级用户(Superuser)。
注意:首次登录是不需要密码,换句话说,默认命名是空的,因此,首次登录后需要修改密码。
7.1登录超级用户数据库postgres
(1)首次登录
命令:psql
(2)修改密码后登录
命令:psql
解析:需要输入密码。提示:Password for user postgres: 。
7.2登录普通用户数据库
登录命令:psql -U hangzhou -d hzdb
解析:psql,使用命令行登录;-U,指定用户;-d,指定数据库。
8.修改登录密码
修改命令:\password
口令:demo123456
解析:需输入两次;\是PostgreSQL的命令语法。
9.退出登录
退出登录的PostgreSQL。
命令:\q
解析:\是PostgreSQL的命令语法。
10.设置远程可登录
(1)修改远程可登录
修改文件:vi /home/data/postgresql/data/postgresql.conf
修改内容:
listen_addresses = '*'
解析:把#listen_addresses = 'localhost',修改为匹配所有IP地址。
(2)修改登录需要密码
修改文件:vi /home/data/postgresql/data/pg_hba.conf
修改内容:
local all all password
host all all 127.0.0.1/32 password
host all all 192.168.19.1/32 password
host all all ::1/128 password
解析:192.168.19.1/32,部署PostgreSQL主机是192.168.19.166。
(3)可以使用navicat等客户端登录
11.常用命令行
常用命令行实际上就是使用psql登录数据库后,支持的命令行和SQL语句。
注意:
PostgreSQL的普通命令行使用反斜杆\开头,结尾无标识符。例如:
命令:\du
PostgreSQL的SQL语句命令行以分号结尾。例如:
命令:create database hzdb;
官网地址:https://www.postgresql.org/docs/current/app-psql.html
(1)登录数据库
登录:psql
解析:默认登录超级用户。
登录:psql -U hangzhou -d hzdb
解析:psql,使用命令行登录;-U,指定用户;-d,指定数据库。
(2)查看数据库用户列表
命令:\du
(3)查看数据库列表
命令:\l
(4)切换数据库
命令格式:\c 数据库名称
命令:\c hzdb
解析:切换到hzdb数据库。
(5)列举数据库中表清单
命令:\dt
(6)查看表结构
命令:\d 表名称
命令:\d t_city
解析:\d查看表结构,包括表字段名称、类型、主键、索引等。
(7)修改密码
命令:\password
解析:修改当前用户登录密码。
(8)退出登录
命令:\q
解析:退出psql程序,也就是退出登录。
(9)查看命令帮助文档
命令:\h
解析:显示数据库支持的全部SQL语句的命令,比如SELECT、CREATE TABLE等。
命令:\h CREATE TABLE
解析:查看CREATE TABLE语句的使用方法。
(10)列出转换类型
命令:\dC
12.创建和删除数据库用户
(1)创建数据库用户
命令:create user hangzhou with password 'demo123456';
(2)删除数据库用户
命令:drop user hangzhou;
(3)查看数据库用户
命令:\du
解析:查看数据库中用户角色,以及角色拥有的权限
(4)使用普通用户登录。
主机名:192.168.19.166
端口:5432
数据库:hzdb
用户名:hangzhou
密码:demo@123456
13.创建和删除数据库
(1)创建数据库
命令:create database hzdb;
命令:create database hzdb owner hangzhou;
(2)删除数据库
命令:drop database hzdb;
(3)查看数据库列表
命令:\l
解析:查看数据库列表,数据库隶属用户,数据库编码,数据库字符集。
14.创建表(CREATE TABLE)
(1)建表
建表语句:
CREATE TABLE t_city (
ID BIGINT NOT NULL,
CITY_NAME VARCHAR (64),
LAND_AREA FLOAT8 DEFAULT NULL,
POPULATION BIGINT DEFAULT NULL,
GROSS FLOAT8 DEFAULT NULL,
CITY_DESCRIBE VARCHAR (512) DEFAULT NULL,
DATA_YEAR VARCHAR (16) DEFAULT NULL,
UPDATE_TIME TIMESTAMP DEFAULT NULL
);
(2)添加表名称和字段注释
-- 表名称注释
COMMENT ON TABLE t_city IS '城市信息表';
-- 字段注释
COMMENT ON COLUMN t_city.ID IS '主键';
COMMENT ON COLUMN t_city.CITY_NAME IS '城市名';
COMMENT ON COLUMN t_city.LAND_AREA IS '城市面积';
COMMENT ON COLUMN t_city.POPULATION IS '城市人口';
COMMENT ON COLUMN t_city.GROSS IS '生产总值';
COMMENT ON COLUMN t_city.CITY_DESCRIBE IS '城市描述';
COMMENT ON COLUMN t_city.DATA_YEAR IS '数据年份';
COMMENT ON COLUMN t_city.UPDATE_TIME IS '更新时间';
(3)创建主键
-- 主键约束
ALTER TABLE t_city ADD CONSTRAINT t_city_id_pk PRIMARY KEY (ID);
(4)创建索引
-- 索引
CREATE INDEX idx_city_name ON t_city (CITY_NAME);
15.表应用
15.1增(INSERT INTO)
INSERT INTO t_city (
ID,CITY_NAME,LAND_AREA,POPULATION,
GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)
VALUES
('1','杭州','16850','1200','1.61','杭州是一个好城市','2020','2022-12-10 15:39:32'),
('2','杭州','16850','1200','1.81','杭州是一个好城市','2021','2022-12-10 15:39:33');
15.2查(SELECT)
SELECT
ID,CITY_NAME,LAND_AREA,POPULATION,
GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME
FROM t_city;
15.3改(UPDATE)
UPDATE
t_city
SET
CITY_DESCRIBE = '杭州是互联网城市'
WHERE CITY_NAME = '杭州'
AND ID = '1';
15.4删(DELETE)
DELETE FROM t_city WHERE CITY_NAME = '杭州' AND ID = '1';
16.删除表(DROP TABLE)
SQL语句:drop table t_city;
17.超级用户postgres的表
(1)查看系统表清单(表: pg_tables)
SQL: select * from pg_tables;
(2)查看数据库用户(表: pg_authid)
SQL: select * from pg_authid;
(3)查看已建数据库(表: pg_database)
SQL: select * from pg_database;
(4)查看分区表(表: pg_partitioned_table)
SQL: select * from pg_partitioned_table;
(5)查看序列(表: pg_sequence)
SQL: select * from pg_sequence;
18.导出建表语句
(1)登录部署数据库主机
命令:su postgres
(2)导出指定数据库
命令:pg_dump -U hangzhou -d hzdb -s > allTable.sql
导出的表结构:
--
-- Name: t_city; Type: TABLE; Schema: public; Owner: hangzhou
--
CREATE TABLE public.t_city (
id bigint NOT NULL,
city_name character varying(64),
land_area double precision,
population bigint,
gross double precision,
city_describe character varying(512) DEFAULT NULL::character varying,
data_year character varying(16) DEFAULT NULL::character varying,
update_time timestamp without time zone
);
ALTER TABLE public.t_city OWNER TO hangzhou;
--
-- Name: TABLE t_city; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON TABLE public.t_city IS '城市信息表';
--
-- Name: COLUMN t_city.id; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.id IS '主键';
--
-- Name: COLUMN t_city.city_name; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.city_name IS '城市名';
--
-- Name: COLUMN t_city.land_area; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.land_area IS '城市面积';
--
-- Name: COLUMN t_city.population; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.population IS '城市人口';
--
-- Name: COLUMN t_city.gross; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.gross IS '生产总值';
--
-- Name: COLUMN t_city.city_describe; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.city_describe IS '城市描述';
--
-- Name: COLUMN t_city.data_year; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.data_year IS '数据年份';
--
-- Name: COLUMN t_city.update_time; Type: COMMENT; Schema: public; Owner: hangzhou
--
COMMENT ON COLUMN public.t_city.update_time IS '更新时间';
--
-- Name: t_city t_city_id_pk; Type: CONSTRAINT; Schema: public; Owner: hangzhou
--
ALTER TABLE ONLY public.t_city
ADD CONSTRAINT t_city_id_pk PRIMARY KEY (id);
--
-- Name: idx_city_name; Type: INDEX; Schema: public; Owner: hangzhou
--
CREATE INDEX idx_city_name ON public.t_city USING btree (city_name);
以上,感谢。
2022年12月10日