\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-树索引的示例
CREATE INDEX idx_last_name ON employees (last_name);
删除 B-树索引的示例
DROP INDEX idx_last_name;
创建唯一索引的示例
CREATE UNIQUE INDEX idx_employee_id ON employees (employee_id);
删除唯一索引的示例
DROP INDEX idx_employee_id;
主键索引在创建主键约束时自动创建,因此不需要单独创建或删除。
外键索引是在创建外键约束时自动创建的,因此不需要单独创建或删除。
创建全文索引的示例
CREATE INDEX idx_content ON articles USING gin (content gin_trgm_ops);
删除全文索引的示例
DROP INDEX idx_content;
创建部分索引的示例
CREATE INDEX idx_high_salary ON employees (salary) WHERE salary > 100000;
删除部分索引的示例
DROP INDEX idx_high_salary;
创建哈希索引的示例
CREATE INDEX idx_last_name ON employees USING hash (last_name);
删除哈希索引的示例
DROP INDEX idx_last_name;
实际工作中会对数据库进行备份和还原,备份主要有三种格式
.bak 即压缩的二进制
.sql 即明文存储
.tar 即tarball压缩格式
数据库备份分单数据库备份,使用 pg_dump 命令;所有数据库备份,使用 pg_dumpall 命令
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
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
使用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