常用SQL
一些常见命令可以通过psql简写来实现,详情请参见psql。同时也可以根据业务情况选择使用如下提供的常见SQL。
查看表对应的Hologres索引和属性信息
SELECT * FROM hologres.hg_table_properties where table_name = '<tablename>';
tablename为表名称。
查看表/视图DDL
select hg_dump_script('<tablename>');
select hg_dump_script('<viewname>');
说明
如果执行失败,需要使用如下命令在DB中创建extension。
create extension hg_toolkit;
查看实例的Endpoint
除了在Hologres管理控制台查看实例的Endpoint外,还可以通过以下命令查看实例的Endpoint。
show hg_frontend_endpoints;
查看当前实例下的所有数据库
SELECT
d.datname AS "Name",
pg_catalog.pg_get_userbyid(d.datdba) AS "Owner",
pg_catalog.pg_encoding_to_char(d.encoding) AS "Encoding",
d.datcollate AS "Collate",
d.datctype AS "Ctype",
pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM
pg_catalog.pg_database d
WHERE
d.datname != 'postgres'
AND d.datname != 'template0'
AND d.datname != 'template1'
ORDER BY
1;
列出当前数据库下所有User Mapping
SELECT
um.srvname AS "Server",
um.usename AS "User name"
FROM
pg_catalog.pg_user_mappings um
WHERE
um.srvname != 'query_log_store_server'
ORDER BY
1,
2;
列出当前数据库下所有Schema
SELECT
n.nspname AS "Name",
pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM
pg_catalog.pg_namespace n
WHERE
n.nspname !~ '^pg_'
AND n.nspname <> 'information_schema'
AND n.nspname != 'hologres'
AND n.nspname != 'hologres_sample'
AND n.nspname != 'hologres_statistic'
AND n.nspname !~ '^hg_'
AND n.nspname !~ '^holo_'
ORDER BY
1;
列出当前数据库下所有表、外表和视图
SELECT
n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN
'table'
WHEN 'v' THEN
'view'
WHEN 'm' THEN
'materialized view'
WHEN 'i' THEN
'index'
WHEN 'S' THEN
'sequence'
WHEN 's' THEN
'special'
WHEN 'f' THEN
'foreign table'
WHEN 'p' THEN
'partitioned table'
WHEN 'I' THEN
'partitioned index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
FROM
pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY
1,
2;
查看当前Schema下所有表以及表Owner(不包含系统表)
SELECT * FROM pg_tables
SELECT n.nspname as "Schema"
,c.relname as "Name"
,CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "Type"
,pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n
ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','p','v','m','S','f','')
and n.nspname <> 'pg_catalog'
and n.nspname <> 'information_schema'
and n.nspname !~ '^pg_toast'
and pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;
查看父表对应的所有子表
SELECT c.oid::pg_catalog.regclass
,c.relkind
,pg_catalog.pg_get_expr(c.relpartbound, c.oid)
FROM pg_catalog.pg_class c
,pg_catalog.pg_inherits i
WHERE c.oid = i.inhrelid
AND i.inhparent::pg_catalog.regclass = 'parent_table_name'::pg_catalog.regclass
ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT'
;
SELECT
nmsp_parent.nspname AS parent_schema,
parent.relname AS parent,
nmsp_child.nspname AS child_schema,
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname='parent_table_name';
查看所有子表的创建时间和所属父表
select
cn.nspname as child_schema_name,c.relname as child_table_name,
pn.nspname as parent_schema_name,p.relname as parent_table_name,
to_timestamp(cp.property_value::bigint) as create_time
from pg_inherits i
left join pg_class p on p.oid=i.inhparent
left join pg_namespace pn on pn.oid = p.relnamespace
left join pg_class c on c.oid=i.inhrelid
left join pg_namespace cn on cn.oid = c.relnamespace
left join hologres.hg_table_properties cp on cp.property_key='create_time' and cp.table_namespace=pn.nspname and cp.table_name = c.relname;
查看所有外部表以及外部表对应的MaxCompute表
SELECT n.nspname
,c.relname
,s.srvname
,pg_catalog.array_to_string(
ARRAY(
SELECT pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value) FROM pg_catalog.pg_options_to_table(ftoptions)
)
,', '
)
FROM pg_catalog.pg_foreign_table f
,pg_catalog.pg_foreign_server s
,pg_catalog.pg_class c
,pg_catalog.pg_namespace n
WHERE s.oid = f.ftserver
and c.oid = f.ftrelid
and c.relnamespace = n.oid
and n.nspname not in ('hologres', 'hologres_statistic', 'pg_catalog', 'pg_toast')
;
列出当前数据库下所有视图
SELECT
n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN
'table'
WHEN 'v' THEN
'view'
WHEN 'm' THEN
'materialized view'
WHEN 'i' THEN
'index'
WHEN 'S' THEN
'sequence'
WHEN 's' THEN
'special'
WHEN 'f' THEN
'foreign table'
WHEN 'p' THEN
'partitioned table'
WHEN 'I' THEN
'partitioned index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
FROM
pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
c.relkind IN ('v', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY
1,
2;
查看表被哪些view依赖
select * from information_schema.view_table_usage where table_name = '<table_name>';
查看表或者表字段的注释
列出当前数据库下所有用户和角色
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit,
r.rolvaliduntil,
ARRAY (
SELECT
b.rolname
FROM
pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE
m.member = r.oid) AS memberof,
r.rolreplication,
r.rolbypassrls
FROM
pg_catalog.pg_roles r
WHERE
r.rolname !~ '^pg_'
ORDER BY
1;
列出当前数据库下所有EXTENSIONS
SELECT
e.extname AS "Name",
e.extversion AS "Version",
n.nspname AS "Schema",
c.description AS "Description"
FROM
pg_catalog.pg_extension e
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace
LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid
AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass
WHERE
e.extname != 'hg_admin_cmd'
AND e.extname != 'holo_dump_stat'
AND e.extname != 'holo_funcs'
AND e.extname != 'holo_link'
AND e.extname != 'holo_system_admin'
AND e.extname != 'holo_dump_stat'
AND e.extname != 'query_log'
AND e.extname != 'plpgsql'
ORDER BY
1;
查看某个账号的对应权限
SELECT * FROM pg_roles where rolname='<uid>'
查看当前实例下所有的用户以及权限示例
SELECT r.rolname
,r.rolsuper
,r.rolinherit
,r.rolcreaterole
,r.rolcreatedb
,r.rolcanlogin
,r.rolconnlimit
,r.rolvaliduntil
,ARRAY(
SELECT b.rolname FROM pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid) WHERE m.member = r.oid
) as memberof
,r.rolreplication
,r.rolbypassrls
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;
查看一个用户有权限的所有表
SELECT current_database()::information_schema.sql_identifier AS table_catalog,
nc.nspname::information_schema.sql_identifier AS table_schema,
c.relname::information_schema.sql_identifier AS table_name,
CASE
WHEN nc.oid = pg_my_temp_schema() THEN 'LOCAL TEMPORARY'::text
WHEN c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]) THEN 'BASE TABLE'::text
WHEN c.relkind = 'v'::"char" THEN 'VIEW'::text
WHEN c.relkind = 'f'::"char" THEN 'FOREIGN'::text
ELSE NULL::text
END::information_schema.character_data AS table_type,
CASE
WHEN (c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"])) OR (c.relkind = ANY
(ARRAY['v'::"char", 'f'::"char"])) AND (pg_relation_is_updatable(c.oid::regclass, false)
& 8) = 8 THEN 'YES'::text
ELSE 'NO'::text
END::information_schema.yes_or_no AS is_insertable_into,
CASE
WHEN t.typname IS NOT NULL THEN 'YES'::text
ELSE 'NO'::text
END::information_schema.yes_or_no AS is_typed,
NULL::character varying::information_schema.character_data AS commit_action
FROM pg_namespace nc
JOIN pg_class c ON nc.oid = c.relnamespace
LEFT JOIN (pg_type t
JOIN pg_namespace nt ON t.typnamespace = nt.oid) ON c.reloftype = t.oid
WHERE (c.relkind = ANY (ARRAY['r'::"char", 'v'::"char", 'f'::"char", 'p'::"char"])) AND
NOT pg_is_other_temp_schema(nc.oid) AND (pg_has_role('<USERID>', c.relowner, 'USAGE'::text)
OR has_table_privilege('<USERID>', c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text)
OR has_any_column_privilege('<USERID>', c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text));
查看一张表有权限的所有用户
select rolname from pg_roles where has_table_privilege(rolname, '<schemaname>.<tablename>',
'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER');