抽空網上收羅Greenplum常用SQL查詢語句整理備忘。歡迎各位留言補充。都是SQL命令以及數據字典的使用。熟悉數據字典非常重要。三個重要的schema:pg_catalog,pg_toolkit,information_schema,其中information_schema 中的數據字典都在視圖中
目錄
一、查看表某模式所有分布鍵信息
二、 數據庫運行狀態查詢管理
1.greenplum查詢正在運行的sql,session
2.終止執行的sql
3.查看greemplum資源隊列狀態
4.查看greemplum資源隊列鎖
5.查看greemplum資源隊列優先級
6.查看greemplum所有連接 類似mysql SHOW PROCESSLIST
7.greemplum磁盤使用,通過SQL查看Greenplum中用了多少空間
8.查看greemplum節點狀態
9.節點故障等歷史信息
10.數據傾斜
11.greemplum表或索引大小 (占用空間)
12.greemplum表和索引大小(占用空間)
13.greemplum查看指定數據庫大小(占用空間)
14.greemplum所有數據庫大小(占用空間)
15.查看greemplum數據分布情況
三、查源數據
16.查看greemplum數據表更新時間
17.通過sql 獲取greemplum表的預估數據量
18.通過sql 獲取greemplum獲取分布鍵
19.通過sql獲取 greemplum指定表結構
20.顯示哪些沒有統計信息且可能需要ANALYZE的表
21.顯示在系統表中被標記為掉線的Segment的信息
22.顯示庫中表的大小(單位G)
23.查詢一個庫中有多少表(如果有分區表不列出子分區)
24.查詢某個用戶對某個表有什么權限
25.查看分區表的信息
26.導入數據
27.遠程導入數據
28.導數據指定分隔符(和mysql的select into outfile很像)
29.生成授權語句
30 .給用戶授權
31、改變postgreSQL的默認schema
一、查看表某模式所有分布鍵信息
SELECT
aaa.nspname AS "模式名",
aaa.relname AS "表名",
aaa.table_comment AS "中文表明",
ccc.attname AS "分布鍵"
FROM
(
SELECT aa.oid,
obj_description (aa.oid) AS table_comment,
aa.relname,
bb.localoid,
bb.attrnums,
regexp_split_to_table (
array_to_string (bb.attrnums, ','),
','
) att,
dd.nspname FROM pg_class aa --原數據信息 最重要的表!
LEFT
JOIN gp_distribution_policy bb ON bb.localoid = aa.oid --分布鍵表
LEFT
JOIN pg_namespace dd ON dd.oid = aa.relnamespace --模式
LEFT
JOIN pg_inherits hh ON aa.oid = hh.inhrelid --繼承表
WHERE dd.nspname = 'dim' -- 替換成需要的模式
AND hh.inhrelid IS NULL
) aaa
LEFT JOIN pg_attribute ccc ON ccc.attrelid = aaa.oid
AND ccc.attnum = aaa.att
WHERE
ccc.attnum > 0
ORDER BY
aaa.relname;
二、 數據庫運行狀態查詢管理
1.greenplum查詢正在運行的sql,session
-- 方法1:
SELECT
tt.procpid, -- pid
usename user_name, -- 執行的用戶
backend_start, -- 會話開始時間
query_start, -- 查詢開始時間
waiting, -- 是否等待執行
now() - query_start AS current_query_time, -- 累計執行時間
now() - backend_start AS current_session_time,*/
current_query,
client_addr , datname
FROM
pg_stat_activity tt
WHERE current_query != '<IDLE>'
ORDER BY current_query_time DESC;
-- 方法2(通過視圖查)
SELECT
procpid,
START,
now() - START AS lap,
current_query,
-- count() over() count_num,
t2.rolname,t3.rsqname,
ip
FROM
(
SELECT
backendid,
pg_stat_get_backend_userid(S.backendid) as uid,
pg_stat_get_backend_client_addr(S.backendid) as ip,
pg_stat_get_backend_pid (S.backendid) AS procpid,
pg_stat_get_backend_activity_start (S.backendid) AS START,
pg_stat_get_backend_activity (S.backendid) AS current_query
FROM
(
SELECT
pg_stat_get_backend_idset () AS backendid
) AS S
) AS t1 left join pg_authid t2 on t1.uid=t2.oid
left join pg_resqueue t3 on t2.rolresqueue=t3.oid
WHERE
current_query!= '<IDLE>'
ORDER BY lap DESC;
-- 方法3(限定了角色和資源隊列,查當前賬號正在查詢的語句)
SELECT
rolname,
rsqname,
pid,
GRANTED,
current_query,
datname
FROM
pg_roles t1,
gp_toolkit.gp_resqueue_status t2 ,
pg_locks t3 ,
pg_stat_activity t4
WHERE
t1.rolresqueue = t3.objid
AND t3.objid=t2.queueid
and t4.procpid=t3.pid
2.終止執行的sql
select pg_terminate_backend(48988); --pid
3.查看greemplum資源隊列狀態
SELECT * FROM gp_toolkit.gp_resqueue_status;
4.查看greemplum資源隊列鎖
SELECT * FROM gp_toolkit.gp_locks_on_resqueue WHERE lorwaiting='true';
5.查看greemplum資源隊列優先級
select * from gp_toolkit.gp_resq_priority_statement;
6.查看greemplum所有連接 類似mysql SHOW PROCESSLIST
select * from pg_stat_activity; -- 所有狀態的連接
7.greemplum磁盤使用,通過SQL查看Greenplum中用了多少空間
select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;
8.查看greemplum節點狀態
select * from gp_segment_configuration tt
select * from gp_segment_configuration tt where tt.status='d'; -- 狀態為down
9.節點故障等歷史信息
select * from gp_configuration_history tt order by 1 desc ;
10.數據傾斜
SELECT
t1.gp_segment_id,
t1.count_tatol,
round(t1.count_tatol-(AVG(t1.count_tatol) over()) ,0)
FROM
(
SELECT
gp_segment_id,
COUNT (*) count_tatol
FROM
<tablename> -- 要查的表
GROUP BY
gp_segment_id
) t1
order by 3
11.greemplum表或索引大小 (占用空間)
select pg_size_pretty(pg_relation_size('gp_test'));
12.greemplum表和索引大小(占用空間)
select pg_size_pretty(pg_total_relation_size('gp_test'));
13.greemplum查看指定數據庫大小(占用空間)
select pg_size_pretty(pg_database_size('postgres'));
14.greemplum所有數據庫大小(占用空間)
select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;
15.查看greemplum數據分布情況
select gp_segment_id,count(*) from gp_test group by gp_segment_id order by 1;
三、查源數據
16.查看greemplum數據表更新時間
SELECT
*
FROM
pg_stat_last_operation,
pg_class
WHERE
objid = oid
AND relname = 'base_common'; -- 表名
17.通過sql 獲取greemplum表的預估數據量
select
relname,
reltuples::int as total
from
pg_class
where
relname = 'base_common'
and relnamespace = (select oid from pg_namespace where nspname = 'positions');
18.通過sql 獲取greemplum獲取分布鍵
SELECT string_agg(att.attname,',' order by attrnums) as distribution
FROM gp_distribution_policy a,pg_attribute att
WHERE a.localoid ='bi_data.schoolmate_relations'::regclass
and a.localoid = att.attrelid
and att.attnum = any(a.attrnums);
19.通過sql獲取 greemplum指定表結構
SELECT
attname, typname
FROM
pg_attribute
INNER JOIN pg_class ON pg_attribute.attrelid = pg_class.oid
INNER JOIN pg_type ON pg_attribute.atttypid = pg_type.oid
INNER JOIN pg_namespace on pg_class.relnamespace=pg_namespace.oid --
WHERE
pg_attribute.attnum > 0
AND attisdropped <> 't'
AND pg_namespace.nspname='resumes'
AND pg_class.relname= 'base_common'
-- and pg_class.relname ~~* any(array['%some%', '%someelse']));
order by pg_attribute.attnum
20.顯示哪些沒有統計信息且可能需要ANALYZE的表
SELECT * from gp_toolkit.gp_stats_missing ;
21.顯示在系統表中被標記為掉線的Segment的信息
SELECT * from gp_toolkit.gp_pgdatabase_invalid;
22.顯示庫中表的大小(單位G)
SELECT sotdoid,sotdsize/1024/1024/1024 as sotdsize,sotdtoastsize,sotdadditionalsize,sotdschemaname,sotdtablename from gp_toolkit.gp_size_of_table_disk order by sotdsize desc;
23.查詢一個庫中有多少表(如果有分區表不列出子分區)
SELECT relname from pg_class a,pg_namespace b where relname not like '%prt%' and relkind ='r' and a.relnamespace=b.oid and nspname not in ('pg_catalog','information_schema','gp_toolkit') and nspname not like '%pg_temp%';
24.查詢某個用戶對某個表有什么權限
select * from INFORMATION_SCHEMA.role_table_grants where grantee='user_name' and table_name='table';
25.查看分區表的信息
SELECT tablename,partitiontablename,partitiontype,partitionboundary from pg_partitions where tablename='table_name' order by partitionboundary desc;
26.導入數據
copy t1 from '/home/gpadmin/t1.txt' with delimiter '|' LOG ERRORS INTO INSERT_ERRS SEGMENT REJECT LIMIT 100;
27.遠程導入數據
psql -h 1.1.1.1 -U user_name -d db_name -W -c "copy tb1 from stdin with delimiter '|'" < /home/gpadmin/tb1.txt
28.導數據指定分隔符(和mysql的select into outfile很像)
psql -d db_name -c "select * from tb1" -o tb1.txt -t -A -F $'/t'
29.生成授權語句
SELECT 'grant select on '||relname||' to user_name;' from pg_class a,pg_namespace b where relname not like '%prt%' and relkind ='r' and has_table_privilege('user_name',a.oid,'select')='f' and a.relnamespace=b.oid and nspname not in ('pg_catalog','information_schema','gp_toolkit') and nspname not like '%pg_temp%';
30 .給用戶授權
select 'grant all on SCHEMA ' || tt.autnspname || ' to tuser;' as grant_script from gp_toolkit.__gp_user_tables tt -- group by tt.autnspname
union -- all
select 'grant all on table ' || tt.autnspname || '.' ||tt.autrelname || ' to tuser;' grant_script from gp_toolkit.__gp_user_tables tt;
31、改變postgreSQL的默認schema
-- Use this to show the current search_path
-- Should return: "$user",public
SHOW search_path;
-- Create another schema
CREATE SCHEMA my_schema;
GRANT ALL ON SCHEMA my_schema TO my_user;
-- To change search_path on a connection-level
SET search_path TO my_schema;
-- To change search_path on a database-level
ALTER database "my_database" SET search_path TO my_schema;