超详细postgresql基础语法和备份恢复

postgresql基础语法

\l 				查看所有库

\c ceshi(库名)	进入对应库

\d				查看所有表

\q				退出数据库

\help			查询语法使用方法

\du+			查看数据库用户

\dp+			查看数据库用户权限

\db+			查看表空间

查看所有用户

select * from pg_user;

创建用户

create user ceshi with password '123456';

修改用户密码

alter user ccxe with password '123456789';

删除用户

drop user ceshi;

创建库

create database ceshi(库名);

删除数据库

drop database ceshi(库名);

创建表

create table business_order(表名)(id serial primary key,order_no varchar(255),sku_name varchar(255));

插入数据

insert into business_order(order_no,sku_name)values('20221126000001','iphone14 plus');

查看表数据

select * from business_order;

查看表结构

\d business_order

删除表

drop table business_order;

查看库里面的所有表

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name;

过滤business_order表中id大于2的所有数据

select * from business_order where id > 2;

获取数据库实例连接数

select count(*) from pg_stat_activity;

查询当前连接数详细信息

select * from pg_stat_activity;

查询数据库中各个用户名对应的数据库连接数

select usename, count(*) from pg_stat_activity group by usename; 

修改business_order表中 id = 3 的 order_no的值

update business_order set order_no = 20221126000007 where id = 3;

删除business_order表中 id为2的数据

delete from business_order where id = 2;

查询business_order表中 order_no字段以2开头的数据

select * from business_order where order_no::text like '2%';

限制查询出来的数量为2

select * from business_order limit 2;

查询business_order表中的数据,并以id进行升序排列,asc表示升序

select * from business_order order by id asc;

查询business_order表中的数据,并以id进行降序排列,desc表示降序

select * from business_order order by id desc;

赋予用户对库的权限

grant all privileges on database mydb to testuser;

取消用户对数据库的权限

revoke all on database mydb from testuser;

查看用户权限

select * from pg_roles;

查看test用户的权限

SELECT * FROM pg_roles WHERE rolname='test';

将当前数据库下cehi的表都授权于 test

grant all privileges on all tables in ceshi to test ;

将单个表授权给test

grant select on table mytable to test ;

将库里面的所有表授权给test用户

grant all on all tables in schema public to test;

授权test用户在table_name表中能执行增删改查的权限

grant select, insert, update, delete on table_name to test;

撤销test用户在table_name表中的权限

revoke select, insert, update, delete on table_name to test;

查看文件默认存放位置

show config_file;

角色属性说明

login		只有具有 LOGIN 属性的角色可以用做数据库连接的初始角色名
superuser		数据库超级用户
createdb		创建数据库权限
createrole		允许其创建或删除其他普通的用户角色(超级用户除外)
replication	做流复制的时候用到的一个用户属性,一般单独设定。
password		在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关
inherit		用户组对组员的一个继承标志,成员可以继承用户组的权限特性

创建角色

CREATE ROLE david;  //默认不带LOGIN属性

赋予登陆权限

ALTER ROLE david WITH LOGIN ;

创建角色bella 并赋予其CREATEDB 的权限

CREATE ROLE bella CREATEDB ;

创建角色renee 并赋予其创建数据库及带有密码登录的属性

CREATE ROLE renee CREATEDB PASSWORD 'abc123' LOGIN;

赋予renee 创建角色的权限

ALTER ROLE renee WITH CREATEROLE;

赋予david 带密码登录权限

ALTER ROLE david WITH PASSWORD 'ufo456';

设置sandy 角色的有效期

ALTER ROLE sandy VALID UNTIL '2019-04-24';

索引

创建索引

在business_order表的order_no列上创建一个名为idx_name_order的索引

create index idx_name_order on business_order(order_no);

通过索引查找数据

select * from business_order where order_no = '20221126000001';

查看对应表的索引

\d business_order

查看所有的索引

\di

删除索引

drop index idx_name_order;
B-树索引(B-Tree Index)

创建 B-树索引的示例

CREATE INDEX idx_last_name ON employees (last_name);

删除 B-树索引的示例

DROP INDEX idx_last_name;
唯一索引(Unique Index)

创建唯一索引的示例

CREATE UNIQUE INDEX idx_employee_id ON employees (employee_id);

删除唯一索引的示例

DROP INDEX idx_employee_id;
主键索引(Primary Key Index)
主键索引在创建主键约束时自动创建,因此不需要单独创建或删除。
外键索引(Foreign Key Index)
外键索引是在创建外键约束时自动创建的,因此不需要单独创建或删除。
全文索引(Full-Text Index)

创建全文索引的示例

CREATE INDEX idx_content ON articles USING gin (content gin_trgm_ops);

删除全文索引的示例

DROP INDEX idx_content;
部分索引(Partial Index)

创建部分索引的示例

CREATE INDEX idx_high_salary ON employees (salary) WHERE salary > 100000;

删除部分索引的示例

DROP INDEX idx_high_salary;
哈希索引(Hash Index)

创建哈希索引的示例

CREATE INDEX idx_last_name ON employees USING hash (last_name);

删除哈希索引的示例

DROP INDEX idx_last_name;

postgresql备份和恢复

实际工作中会对数据库进行备份和还原,备份主要有三种格式
 
.bak 即压缩的二进制 

.sql 即明文存储 

.tar 即tarball压缩格式 

数据库备份分单数据库备份,使用 pg_dump 命令;所有数据库备份,使用 pg_dumpall 命令

pg_dump 常用选项

1. pg_dump支持精确指定要备份的表、schema、和database

2. 备份文件可以是SQL文件格式、自定义压缩格式或者tar包格式

通用选项:

-f, --file=FILENAME          		输出文件名或目录名

-F, --format=c|d|t|p         		输出文件格式(自定义、目录格式、tar包格式、纯文本)

-j, --jobs=NUM               		使用多个并行作业进行转储

-v, --verbose                		详细信息模式

详细模式:

-b, --blobs                  		在转储中包括大对象

-c, --clean                  		在重新创建之前,先清除(删除)数据库对象

-C, --create                 		在转储中包括命令,以便创建数据库(包括建库语句,无需在导入之前先建数据库)

-n, --schema=SCHEMA          	只转储指定名称的模式

-N, --exclude-schema=SCHEMA  		不转储已命名的模式

-t, --table=TABLE            		只转储指定名称的表

--column-inserts             		以带有列名的INSERT命令形式转储数据

控制输出内容选项:

-d, --dbname=DBNAME          	数据库名

-h, --host=HOSTNAME          		数据库服务器的主机名或套接字目录

-p, --port=PORT              		数据库服务器的端口号

-U, --username=NAME          	以指定的数据库用户联接

-w, --no-password            		永远不提示输入口令

-W, --password               		强制口令提示 (自动)

--role=ROLENAME              	在转储之前执行SET ROLE命令

备份某个database,备份结果以自定义压缩格式输出:

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f mydb.backup(自定义文件名) mydb(库名)

备份某个database,备份结果以SQL文本格式输出,输出结果要包含CREATE DATABASE 语句:

pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.sql mydb

备份某个database中所有名称以"pay"开头的表,备份结果以自定义压缩格式输出:

pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *.pay* -f pay.backup mydb

备份某个database中hr和payroll这两个schema中的所有数据,备份结果以自定义压缩格式输出:

pg_dump -h localhost -p 5432 -U someuser -F c -b -v -n hr -n payroll -f hr.backup mydb

备份某个database中除public schema中的数据以外的所有数据,备份结果以自定义压缩格式输出:

pg_dump -h localhost -p 5432 -U someuser -F c -b -v -N public -f all_sch_except_pub.backup mydb

将数据备份为SQL文本文件,且生成INSERT语句,该文件可以用于低版本的PostgreSQL或其它支持SQL的非PostgreSQL数据库

pg_dump -h localhost -p 5432 -U someuser -F p --column-inserts -f select_tables.backup mydb

pg_dumpall 常用选项

1. pg_dumpall不支持导出SQL文件以外的其他格式

2. pg_dumpall可以将当前所有database数据导出为SQL文本

3. 可以同时导出表空间定义和角色等全局对象

4. 建议每天对角色和表空间定义等全局对象进行备份,但不建议每天使用pg_dumpall来备份全库数据



通用选项:

-f, --file=FILENAME          	输出文件名

-v, --verbose                	详细信息模式

控制输出内容选项:

-a, --data-only              	仅转储数据,而不转储schema

-g, --globals-only           	仅转储全局对象,而不转储数据库

-r, --reles-oly              	仅转储角色,而不转储数据库和表空间

-s, --schema-only            	仅转储shema,而不转储数据

--inserts                    	以INSERT命令(而非COPY命令)的形式转储数据

连接选项:

-d, --dbname=DBNAME         数据库名

-h, --host=HOSTNAME          	数据库服务器的主机名或套接字目录

-l, --database=DBNAME        	代替默认数据库

-p, --port=PORT              	数据库服务器的端口号

-U, --username=NAME          以指定的数据库用户联接

-w, --no-password            	永远不提示输入口令

-W, --password               	强制口令提示 (自动)

--role=ROLENAME             在转储之前执行SET ROLE命令

pg_dumpall备份数据库

pg_dumpall -h localhost -U postgres -p 5432 -v -f /tmp/all.backup

pg_dumpall仅备份角色和表空间定义

pg_dumpall -h localhost -U postgres --port=5432 -f myglobals.sql --globals-only

pg_dumpall仅需备份角色定义而无需备份表空间

pg_dumpall -h localhost -U postgres --port=5432 -f myroles.sql --roles-only

PostgreSQL支持以下两种数据恢复方式

使用psql来恢复pg_dump或pg_dumpall工具生产的sql文本格式的数据备份

使用pg_restore工具来恢复由pg_dump工具生产的自定义压缩格式、tar包格式或者目录格式备份

恢复一个SQL备份文件并忽略过程中可能发生的所有错误

psql -U postgres -f myglobals.sql

恢复一个SQL备份文件,如遇错误则立即停止恢复

psql -U postgres --set ON_ERROR_STOP=on -f myglobals.sql

将SQL文本中的数据恢复到某个指定的database

psql -U postgres -d mydb(库名) -f select_objects.sql

使用pg_restore进行恢复

pg_restore 常用参数

通用选项:

-d, --dbname=DBNAME         数据库名

-f, --file=FILENAME          	输入文件名

-F, --format=c|d|t           	输入文件格式(可以自动识别)

-v, --verbose                	详细信息模式

详细模式:

-a, --data-only              	仅恢复数据,而不恢复schema

-C, --create                 	创建目标数据库

-j, --jobs=NUM               	使用多个并行作业进行恢复

-s, --schema-only            	仅恢复shema,而不恢复数据

--section=SECTION          	恢复命名部分(包括三个部分:pre-data,data以及post-data。

                            		data部分包含表记录数据、大对象数据以及序列的值;\

                            		post-data部分包含索引、触发器、规则和约束的定义;\

                            		pre-data部分包含除此外其他所有的对象定义)

控制输出内容选项:

-h, --host=HOSTNAME          	数据库服务器的主机名或套接字目录

-p, --port=PORT              	数据库服务器的端口号

-U, --username=NAME          以指定的数据库用户联接

-w, --no-password            	永远不提示输入口令

-W, --password               	强制口令提示 (自动)

--role=ROLENAME             	在转储之前执行SET ROLE命令

先创建目标数据库

create databases mydb;

执行恢复

pg_restore -d mydb --jobs=4 --verbose mydb.backup

如果备份和恢复使用相同的database,则可以通过添加–create选项省去单独创建库的过程

pg_restore --dbname=postgres --create --jobs=4 --verbose mydb.backup

--create选项,必须先连接数据库,才能创建数据库,所有指定--dbname=postgres


9.2版本或更新的pg_restore支持--section选项,实现仅恢复表结构而不恢复表数据,创建模板数据库时可以使用这个方法

CREATE DATABASE mydb2;

pg_restore --dbname=mydb2 --section=pre-data --job=4 mydb.backup

你可能感兴趣的:(postgresql,数据库,oracle)