bin\initdb -D data -U postgres -E utf8 --no-locale
参数含义可以参考帮助:
2.3 启动
bin/pg_ctl -D data -l logfile start
2.4 连接
这里我们使用navicat,具体配置如下:
注意:帐号密码默认为postgres。
三、DBA常用SQL查询语句
3.1 查看帮助命令
help --总的帮助
\h --SQL commands级的帮助
? --psql commands级的帮助
3.2 按列显示,类似MySQL的\G
Expanded display is on.
3.3 查看DB安装目录(最好root用户执行)
find / -name initdb
3.4 查看有多少DB实例在运行(最好root用户执行)
find / -name postgresql.conf
3.5 查看DB版本
cat $PGDATA/PG_VERSION
psql --version
show server_version;
select version();
3.6 查看DB实例运行状态
pg_ctl status
3.7 查看所有数据库
psql --l --查看5432端口下面有多少个DB
psql --p XX --l --查看XX端口下面有多少个DB
select * from pg_database;
3.8 创建数据库
createdb database_name
create database --创建数据库的帮助命令
create database database_name
3.9 进入某个数据库
psql --d dbname
3.10 查看当前数据库
select current_database();
3.11 查看数据库文件目录
show data_directory;
cat $PGDATA/postgresql.conf |grep data_directory
cat /etc/init.d/postgresql|grep PGDATA=
lsof |grep 5432得出第二列的PID号再ps --ef|grep PID
3.12 查看表空间
select * from pg_tablespace;
3.13 查看语言
select * from pg_language;
3.14 查询所有schema,必须到指定的数据库下执行
select * from information_schema.schemata;
SELECT nspname FROM pg_namespace;
3.15 查看表名
--只能查看到当前数据库下public的表名
SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' ORDER BY tablename;
SELECT * FROM information_schema.tables WHERE table_name='ff_v3_ff_basic_af';
3.16 查看表结构
select * from information_schema.columns where table_schema='public' and table_name='XX';
3.17 查看索引
select * from pg_index;
3.19 查看视图
select * from pg_views where schemaname = 'public';
select * from information_schema.views where table_schema = 'public';
3.19 查看触发器
select * from information_schema.triggers;
3.20 查看序列
select * from information_schema.sequences where sequence_schema = 'public';
3.21 查看约束
select * from pg_constraint where contype = 'p'
select a.relname as table_name,b.conname as constraint_name,b.contype as constraint_type from pg_class a,pg_constraint b where a.oid = b.conrelid and a.relname = 'cc';
3.22 查看XX数据库的大小
SELECT pg_size_pretty(pg_database_size('XX')) As fulldbsize;
3.23 查看所有数据库的大小
select pg_database.datname, pg_size_pretty (pg_database_size(pg_database.datname)) AS size from pg_database;
3.24 查看各数据库数据创建时间:
select datname,(pg_stat_file(format('%s/%s/PG_VERSION',case when spcname='pg_default' then 'base' else 'pg_tblspc/'||t2.oid||'/PG_11_201804061/' end, t1.oid))).* from pg_database t1,pg_tablespace t2 where t1.dattablespace=t2.oid;
3.25 按占空间大小,顺序查看所有表的大小
select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc;
3.26 按占空间大小,顺序查看索引大小
select indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;
SELECT c.table_catalog,
c.table_schema AS schema_name,
c.table_name,
a.column_name,
d.description AS column_comment,
'COMMENT ON COLUMN '||c.table_schema||'.'||c.table_name||'.'||a.column_name||' IS '''||(
case when a.column_name = 'id' then '主键'
when a.column_name like '%ids%' then '序列'
when a.column_name like '%id%' then '编码'
when a.column_name like '%name%' then '名称'
when a.column_name like '%create_by%' then '创建人'
when a.column_name like '%create_date%' then '创建时间'
when a.column_name like '%update_by%' then '更新人'
when a.column_name like '%update_date%' then '更新时间'
when a.column_name like '%del_flag%' then '删除标识'
when a.column_name like '%email%' then '邮件'
when a.column_name like '%phone%' then '电话'
when a.column_name like '%remark%' then '备注'
when a.column_name like '%extend%' then '扩展'
when a.column_name like '%time%' then '时间'
else '1-'||a.column_name||zysjb.random_char(3) end
)||''';' newcomment
FROM information_schema.columns a
LEFT JOIN pg_catalog.pg_statio_all_tables b ON a.table_schema = b.schemaname AND a.table_name = b.relname
LEFT JOIN pg_catalog.pg_description d ON b.relid = d.objoid AND d.objsubid = a.ordinal_position
INNER JOIN information_schema.tables c ON a.table_schema = c.table_schema AND a.table_name = c.table_name
WHERE c.table_schema = 'myschema'
--AND c.table_name = 'gc_org'
and d.description is null
随机数生成函数
sql复制代码
CREATE OR REPLACE FUNCTION "zysjb"."random_int"("start_num" int4, "end_num" int4)
RETURNS "pg_catalog"."int4" AS $BODY$
BEGIN
-- 功能,生成最小值为start_num,最大值为end_num的随机数
RETURN FLOOR(start_num + random() * (end_num - start_num + 1));
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
字符串随机生成函数
复制代码
CREATE OR REPLACE FUNCTION "zysjb"."random_char"("num" int4)
RETURNS "pg_catalog"."varchar" AS $BODY$
DECLARE
tmp VARCHAR;
tmpp VARCHAR;
chineseStr VARCHAR := '乾坤有序宇宙无疆星辰密布斗柄指航昼白夜黑日明月亮风驰雪舞电闪雷响';
BEGIN
WHILE(num>0) LOOP
SELECT substr(chineseStr,zysjb.random_int(1,char_length(chineseStr)),1) INTO tmpp;
tmp := concat(tmp,tmpp);
--RAISE NOTICE '核对-5:tmp:% tmpp:% %', tmp, tmpp, char_length(chineseStr) ;
num := num-1;
END LOOP;
RETURN tmp;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
4.10 pg中踢夜函数
复制代码
CREATE OR REPLACE FUNCTION get_minutes_out_of_night_str(start_time timestamp, end_time timestamp, night_start time, night_end time)
RETURNS integer AS $$
DECLARE
total_minutes integer := 0;
i timestamp;
j time;
BEGIN
/*
日期:2024-07-30
author:wu.danyang
入参:
start_time: 开始时间
end_time:结束时间
night_start: 夜间开始时间点
night_end: 夜间结束时间点
返回:分钟数
示例:SELECT get_minutes_out_of_night_str('2024-01-01 19:00:00', '2024-01-01 22:00:00', '20:00:00', '23:00:00')
*/
FOR i IN SELECT generate_series(start_time, end_time, '1 minute') loop
j := TO_char(i, 'HH24:MI:SS')::time;
if night_start <= night_end THEN
-- RAISE NOTICE '1-j :%', j;
if j >= night_start and j < night_end THEN
-- RAISE NOTICE 'night_start <= night_end :%', j;
CONTINUE;
END IF;
else
-- RAISE NOTICE '2-j :%', j;
if (j >= night_start and j <= '23:59:59'::time) or (j >= '00:00:00'::time and j <= night_end) THEN
-- RAISE NOTICE 'night_start > night_end :%', j;
CONTINUE;
END IF;
END IF;
total_minutes = total_minutes + 1;
END LOOP;
RETURN total_minutes;
END; $$ LANGUAGE plpgsql;