-- 修改用户密码 ALTERUSER myuser WITH PASSWORD 'newpassword';
-- 修改数据库所有者 ALTER DATABASE mydb OWNER TO postgres;
-- 删除数据库 DROP DATABASE mydb;
常用初始化脚本示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
-- Authentik CREATE ROLE authentik WITH LOGIN PASSWORD 'password' VALID UNTIL 'infinity'; GRANT authentik TO postgres; CREATE DATABASE authentik WITH ENCODING='UTF8' OWNER=authentik CONNECTION LIMIT=-1; REVOKE authentik FROM postgres;
-- Confluence CREATE ROLE confluence WITH LOGIN PASSWORD 'password' VALID UNTIL 'infinity'; GRANT confluence TO postgres; CREATE DATABASE confluence WITH ENCODING='UTF8' OWNER=confluence CONNECTION LIMIT=-1; REVOKE confluence FROM postgres;
-- LobeChat CREATEUSER lobechat WITH LOGIN PASSWORD 'password' VALID UNTIL 'infinity'; GRANT lobechat TO postgres; CREATE DATABASE lobechat WITH ENCODING='UTF8' OWNER=lobechat CONNECTION LIMIT=-1; REVOKE lobechat FROM postgres;
SELECT table_schema ||'.'|| table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"'|| table_schema ||'"."'|| table_name ||'"')) AS size FROM information_schema.tables ORDERBY pg_total_relation_size('"'|| table_schema ||'"."'|| table_name ||'"') DESC LIMIT 20;
方法三:分离数据和索引大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
SELECT table_name, pg_size_pretty(table_size) AS table_size, pg_size_pretty(indexes_size) AS indexes_size, pg_size_pretty(total_size) AS total_size FROM ( SELECT table_name, pg_table_size(table_name) AS table_size, pg_indexes_size(table_name) AS indexes_size, pg_total_relation_size(table_name) AS total_size FROM ( SELECT ('"'|| table_schema ||'"."'|| table_name ||'"') AS table_name FROM information_schema.tables ) AS all_tables ORDERBY total_size DESC ) AS pretty_sizes;
-- 获取 UTC 时间 UPDATE npc_list SET update_time = timezone('utc', now());
-- 获取当前月份 SELECT date_part('month', now());
-- 获取当前日期 SELECTCURRENT_DATE;
进程管理
查找和终止挂起的查询:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-- 查看所有活动进程 SELECT*FROM pg_stat_activity WHERE state ='active';
-- 查看特定数据库的连接 SELECT*FROM pg_stat_activity WHERE datname ='mydb';
-- 取消查询(温和方式) SELECT pg_cancel_backend(PID);
-- 强制终止连接 SELECT pg_terminate_backend(PID);
-- 终止指定数据库的所有连接 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname ='mydb'AND pid <> pg_backend_pid();
高级用法
CROSS JOIN 与 JSONB 数组
展开 JSONB 数组并进行计算:
1 2 3 4 5 6 7
SELECT attribute->>'uid'AS uid, attribute->>'day'ASday, (building->>'lv')::integer* (building->>'num')::integerAS total FROM public.user_daily_report CROSSJOIN jsonb_array_elements(metric->'building') AS building WHERE attribute->>'day'='2019-09-01';
Vector 类型转换
在使用向量数据库功能时(如 pgvector):
1 2 3
-- 修改 embeddings 列的维度 ALTERTABLE embeddings ALTERCOLUMN embeddings TYPE vector(3072);