postgresql

 --查詢所有表名
 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');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章