登录
--登录
psql -h 主机 -p 端口 -U 用户 -d 数据库
授权
grant select on my_schema.t to aa; -- my_schema.t .t 表名称
grant all on clean_data to yy_odp;
ALTER TABLE "public"."tyc_data_20211019_copy2"
OWNER TO "yy_odp";
备份还原
--还原
pg_restore -h 决策易数据库地址 -p 5432 -U 数据库用户 -a -d 数据库 -t 表名称 备份文件路径
pg_restore -h 192.168.6.214 -p 5432 -U postgres -a -d masterdata_clean
--备份
pg_dump -h 主机地址 -p 端口 -U 用户名 -d 数据库 -W -F c -b -v -t 表名称 -f e:\tt.dmp
导入导出
--导出数据至csv
\COPY (select roleprivileges.* from roleprivileges inner join TblUdtEntity on roleprivileges.entityid = TblUdtEntity.tbludtentityid where TblUdtEntity.entitytypecode in('dd_accountbase'))
TO 'E:database\zz\data.csv' with csv;
-- 替换 E:database\zz\data.csv 修改该路径
--导入csv数据至数据库
\COPY roleprivilegesbase FROM 'E:database\zz\data.csv' WITH csv;
数据库链接
-- 查看数据库连接使用情况
select * from pg_stat_activity
-- 杀死进程 (强度从弱到轻)
select pg_cancel_backend(pid) -- 后台发送sigint信号,关闭当前后台进程,用户只能关闭自己的后台进程,事务回滚。
select pg_terminate_backend(pid) --推荐 强杀,向后台发送sigterm信号,关闭当前后台进程,需要有超级用户权限,超级用户可以关闭所有后台进程,事务回滚。
select kill -9 (pid) --不推荐 操作系统层面,暴力杀死进程 如果是kill一个很大的update,需要很长的时间做回滚,回滚过程中数据库不可用。
set statement_timeout to 30000; -- 30000 单位 毫秒 -- 超时设置
select count(1) from pg_stat_activity; -- 当前总共正在使用的连接数
show max_connections; --显示系统允许的最大连接数
show superuser_reserved_connections ; --显示系统保留的用户数
select usename, count(*) from pg_stat_activity group by usename order by count(*) desc; --按照用户分组查看
alter system set max_connections= 数量 --修改最大连接数
https://blog.51cto.com/geekbin/1398671 --postgresql修改配置生效方法
结束闲置数据库链接
select * from pg_stat_activity where state = 'idle';
--select pg_terminate_backend(pid);
-- 释放空链接
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state='idle';
数据库扩展
-- 查看数据库扩展
select * from pg_extension;
-- 创建 gin 索引扩展
CREATE EXTENSION pg_bigm;
-- 创建 gin 索引 (主要用于扩展模糊搜索)
CREATE INDEX odp_accountbase_name_bigm_idx ON public.odp_accountbase USING gin (name gin_bigm_ops);
查看表索引情况
select * from pg_indexes where tablename = 'tyc_data_cleanbase';
备份表
SELECT * INTO doctor20220107 FROM doctor;
查看锁表情况
select
b.relname,
a.pid,
a.locktype,
a.database,
a.mode,
a.relation
from pg_locks a
join pg_class b on a.relation = b.oid
where b.relname = '表名';
--杀死进程释放锁
select pg_cancel_backend(pid); -- pid 就是上面查询到的 pid 列
查看清理情况
SELECT
relname ,--表名
seq_scan ,--全表扫描次数
seq_tup_read ,--全表扫描记录数
idx_scan ,--索引扫描次数
idx_tup_fetch ,--索引扫描记录数
n_tup_ins ,--插入的条数
n_tup_upd ,--更新的条数
n_tup_del ,--删除的条数
n_tup_hot_upd ,--热更新条数
n_live_tup ,--活动元组估计数
n_dead_tup ,--死亡元组估计数
last_vacuum ,--最后一次手动清理时间
last_autovacuum ,--最后一次自动清理时间
last_analyze ,--最后一次手动分析时间
last_autoanalyze ,--最后一次自动分析时间
vacuum_count ,--手动清理的次数
autovacuum_count ,--自动清理的次数
analyze_count ,--手动分析此表的次数
autoanalyze_count ,--自动分析此表的次数
( CASE WHEN n_live_tup > 0 THEN n_dead_tup :: float8 / n_live_tup :: float8 ELSE 0 END ) :: NUMERIC ( 12, 2 ) AS "死/活元组的比例"
FROM
pg_stat_all_tables
WHERE
schemaname = 'public' and relname ='odp_doctorbase'
ORDER BY n_dead_tup::float8 DESC;
VACUUM FULL VERBOSE odp_doctorbase;
VACUUM FULL VERBOSE ANALYZE odp_doctorbase;