--查詢所有表名
SELECT tablename FROM pg_tables WHERE schemaname ='public';
--查詢所有view名
SELECT viewname FROM pg_views WHERE schemaname ='public';
--查詢表結構
SELECT a.attnum,
a.attname AS field,
t.typname AS type,
a.attlen AS length,
a.atttypmod AS lengthvar,
a.attnotnull AS notnull,
b.description AS comment
FROM pg_class c,
pg_attribute a
LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t
WHERE c.relname = 'groups_tree'
and a.attnum > 0
and a.attrelid = c.oid
and a.atttypid = t.oid
ORDER BY a.attnum;
--函數名
SELECT
pg_proc.proname AS "函數名稱",
pg_type.typname AS "返回值數據類型",
pg_proc.pronargs AS "參數個數",
pg_proc.prosrc
FROM pg_proc
JOIN pg_type ON (pg_proc.prorettype = pg_type.oid)
WHERE pronamespace = (SELECT pg_namespace.oid FROM pg_namespace WHERE nspname = 'public');
--查詢函數的參數
SELECT routines.routine_name, parameters.data_type, parameters.ordinal_position
FROM information_schema.routines
JOIN information_schema.parameters ON routines.specific_name=parameters.specific_name
WHERE routines.specific_schema='public'
ORDER BY routines.routine_name, parameters.ordinal_position;
--查詢函數的參數
SELECT routines.routine_name,
ARRAY(SELECT unnest(array_agg(concat(parameters.ordinal_position, ':', parameters.data_type))) AS unnest) as parameters
FROM information_schema.routines
JOIN information_schema.parameters ON routines.specific_name=parameters.specific_name
WHERE routines.specific_schema='public'
GROUP BY routines.routine_name;
--查詢所以函數並列出函數參數
WITH cte(routine_name, parameters) AS (SELECT routines.routine_name,
ARRAY(SELECT unnest(array_agg(concat(parameters.ordinal_position, ':', parameters.data_type))) AS unnest) as parameters
FROM information_schema.routines
JOIN information_schema.parameters ON routines.specific_name=parameters.specific_name
WHERE routines.specific_schema='public'
GROUP BY routines.routine_name)
SELECT
pg_proc.proname AS "函數名稱",
pg_type.typname AS "返回值數據類型",
pg_proc.pronargs AS "參數個數",
pg_proc.prosrc,
cte.parameters
FROM pg_proc
JOIN pg_type ON (pg_proc.prorettype = pg_type.oid)
LEFT JOIN cte ON pg_proc.proname=cte.routine_name
WHERE pronamespace = (SELECT pg_namespace.oid FROM pg_namespace WHERE nspname = 'public');