postgresql基础知识

参考: https://www.runoob.com/postgresql/postgresql-schema.html
dbeave数据备份参考:https://blog.csdn.net/weixin_46990523/article/details/132025188

postgres安装

systemctl start docker
mkdir -p /export/server/pgsql/data

docker pull postgres:10.12
docker run -d --restart=always --name postgres -v /export/server/pgsql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:10.12

docker exec -it postgres bash
psql -p 5432 -U postgres

pgsql的配置:

修改postgres用户的密码,方便远程登录(初始登录不需要密码)
ALTER USER postgres WITH ENCRYPTED PASSWORD ‘123456’;
g_hba.conf配置文件所有用户必须密码登录:

# 所有数据库(all)、所有用户(all)、从本机(127.0.0.1/32)均可免密访问(trust)
host    all             all             0.0.0.0/0               md5

创建模式

schema \h
create schema myschema;
create table myschema.company(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25),
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);
DROP SCHEMA myschema;
DROP SCHEMA myschema CASCADE;


dbeaver导出数据
参考: https://blog.csdn.net/WTUDAN/article/details/120767542

新建用户名和密码绑定新的数据库

docker exec -it postgres bash
psql -p 5432 -U postgres
psql -p 5432 -U qardbuser -d qardb 
create user qardbuser with password 'qardbuser';
create database qardb;
GRANT ALL privileges on database qardb TO qardbuser;

-d 数据库
psql
默认的用户和数据库都是postgres

修改默认postgres用户的密码
ALTER USER postgres with encrypted password ‘postgres’;

\help select
\q 退出
\l 查看数据库
\c mydb; connected to database “mydb”

支持的命令选项

?

创建数据库

https://www.runoob.com/postgresql/postgresql-create-database.html

-- 创建数据库
postgres=# create database mydb;
CREATE DATABASE

-- 切换数据库
postgres=# \c mydb
-- 删除数据库
postgres=# drop database mydb;

postgres=# createdb mydb;
postgres=# create table demo(id serial primary key, name varchar(20));
postgres=# insert into demo(name) values('jack');
-- 查看所有的表
\d  
-- 查看表结构
\d demo 

数据库备份命令

docker exec -it postgres bash
root@4923de46438a:/# pg_dump --help
-f --file=FILENAME :指定输出文件地址
-F, --format=c|d|t|p :选择文件内容格式(custom, directory, tar,plain text (default)),默认就是文本格式 -Fp

root@4923de46438a:/# pg_dump -U zjyuser -d db2 -Fp -f /var/lib/postgresql/data

pg_dump mydb > mydb.bak
pg_dump mydb > mydb.sql;
pg_dump -f /tmp/mydb.bak mydb;
psql -f /tmp/mydb.bak mydb;

pg_dumpall > pg_backup.bak
pg_dump -F t -f /tmp/mydb.tar mydb;


数据库恢复

权限管理

mydb=# create user mydb with password ‘1234567’;
psql -U mydb -d mydb
DROP USER mydb;

GRANT ALL ON COMPANY TO runoob;
授权数据库
GRANT ALL privileges on database mydb TO mydb;
授权表
GRANT ALL privileges on all tables in schema public TO mydb;

drop user mydb;

进入超级权限修改用户
revoke all privileges on database mydb from mydb;
进去数据库mydb;
revoke all privileges on all tables in schema public from mydb;

postgresql的数据类型

参考文档
https://www.runoob.com/postgresql/postgresql-data-type.html

### 数值类型
integer	4 字节	常用的整数
bigint	8 字节	大范围整数
serial	4 字节	自增整数	1 到 20亿
numeric	可变长	用户指定的精度,精确
### 货币类型
money	8 字节	货币金额类型存储带有固定小数精度的货币金额。
### 字符类型
varchar(n) 变长
char(n)  定长
text
变长,无长度限制
### 日期/时间类型
timestamp 时间戳
date 日期
time 时间
interval 时间间隔
### 布尔类型
boolean 1字节

# 其他类型
枚举类型,几何类型,网络地址类型,位串类型,文本搜索类型,UUID 类型,XML 类型,JSON 类型,数组类型,复合类型,范围类型,对象标识符类型,伪类型
UUID 被写成一个小写十六进制数字的序列,由分字符分成几组, 特别是一组8位数字+3组4位数字+一组12位数字,总共 32 个数字代表 128 位, 一个这种标准的 UUID 例子如下:

a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

创建表

create table sys_user(
id INTEGER not null,
username varchar(50),
password VARCHAR(100),
PRIMARY KEY (id),
UNIQUE(username)
)
-- 不区分大小写 pgsql的语法较宽容,没有“;”也可以
drop TABLE SYS_USER;
-- 删除多个表
drop table department, company;

schema模式

PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。一个模式可以包含视图、索引、数据类型、函数和操作符等。相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。
使用模式的优势:
允许多个用户使用一个数据库并且不会互相干扰。
将数据库对象组织成逻辑组以便更容易管理。
第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。
模式类似于操作系统层的目录,但是模式不能嵌套。

-- 创建模式 
create schema myschema;
-- 制定模式下创建表
create table myschema.demo(
	id INTEGER not null,
	name text not null,
	PRIMARY key (id),
	UNIQUE(name)
)
-- depend on it 不能删除
DROP SCHEMA myschema;
-- 删除一个模式以及其中包含的所有对象:级联删除
DROP SCHEMA myschema CASCADE;

插入数据

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   JOIN_DATE      TIMESTAMP -- 想要日期时间格式的只有·时间戳·, date 日期 time 时间
   -- publication_date TIMESTAMP WITH TIME ZONE NOT NULL
);

drop table company;

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (2, 'Paul', 32, 'California', 20000.00,'2001-07-13 12:12:12');
-- 
INSERT INTO COMPANY VALUES (3, 'Paul', 32, 'California', 20000.00,DEFAULT);
INSERT INTO COMPANY VALUES (4, 'Paul', 32, 'California', 20000.00);
UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 15000 WHERE ID = 1;
DELETE FROM COMPANY WHERE ID = 4;
SELECT * FROM COMPANY LIMIT 3 OFFSET 2;
SELECT * FROM COMPANY ORDER BY id, SALARY ASC;
SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
select * from company;
-- with 子查询
With CTE AS
(Select
NAME
, AGE
, ADDRESS
, SALARY
FROM COMPANY )
Select age,salary From CTE;
SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
SELECT DISTINCT name FROM COMPANY;

修改表字段

ALTER TABLE ex.ori_foc_t3005 ALTER COLUMN flight_date TYPE date USING flight_date::date;




追加约束主键

ALTER TABLE ex.ori_foc_t2001 ADD CONSTRAINT ori_foc_t2001_pk PRIMARY KEY (uuid);

PostgreSQL 约束

创建表

-- public.meas_para_outer_dependence definition

-- Drop table

-- DROP TABLE public.meas_para_outer_dependence;

CREATE TABLE public.meas_para_outer_dependence (
	id serial4 NOT NULL, -- 主键id
	outer_value int4 NULL, -- 外部依赖的参数项:1:获取跑道长度
	meas_para_id int4 NOT NULL, -- 测量参数id
	query_script varchar(500) NOT NULL, -- 外部参数的查询脚本
	CONSTRAINT meas_para_outer_dependence_pkey PRIMARY KEY (id)
);

CREATE TABLE public.qar_debugger_csv (
	id serial4 NOT NULL, -- 主键id
	qar_id varchar(50) NOT NULL,
	csv_path varchar(500) NOT NULL, -- 外部参数的查询脚本
	update_time timestamp null,
	CONSTRAINT qar_debugger_csv_pkey PRIMARY KEY (id)
);
CREATE INDEX idx_qar_debugger_csv_qar_id ON public.qar_debugger_csv (qar_id);

-- Column comments

COMMENT ON COLUMN public.meas_para_outer_dependence.id IS '主键id';
COMMENT ON COLUMN public.meas_para_outer_dependence.outer_value IS '外部依赖的参数项:1:获取跑道长度';
COMMENT ON COLUMN public.meas_para_outer_dependence.meas_para_id IS '测量参数id';
COMMENT ON COLUMN public.meas_para_outer_dependence.query_script IS '外部参数的查询脚本';

-- Permissions

ALTER TABLE public.meas_para_outer_dependence OWNER TO qar;
GRANT ALL ON TABLE public.meas_para_outer_dependence TO qar;

复杂sql

select t1.id, count(t2.rc_type), t1.rc_type,
array_length(string_to_array(string_agg(DISTINCT t1.rc_type::text, ','), ','), 1) AS nums
from bus_qar_rc_task t1
         inner join bus_qar_rc_task_flt_detail t2
                    on t2.task_id = t1.id
where t2.rc_type !=0 -- 取非记录参数
    and t2.state in (2,3,4)
group by t1.id



-- 分组统计和字段拆分过滤统计

SELECT
    t1.id,
    COUNT(DISTINCT t2.rc_type) AS distinct_rc_type_count,
    t1.rc_type,
    array_length(array_remove(string_to_array(string_agg(DISTINCT t1.rc_type::text, ','), ','), '0'), 1) AS nums
FROM
    bus_qar_rc_task t1
INNER JOIN
    bus_qar_rc_task_flt_detail t2
ON
    t2.task_id = t1.id
WHERE
    t2.rc_type != 0 -- 取非记录参数
    AND t2.state IN (2, 3, 4)
GROUP BY
    t1.id;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值