Compendio de consultas útiles al catálogo de postgreSQL.

Anthony R. Sotolongo León asotolongo@uci.cu Dpto. de PostgreSQL. DATEC Universidad de Ciencias Informáticas (UCI). La Habana, Cuba 2011

....................................................................................................................................... ......................................................................................................................................................... 10 Obtener los privilegios de una vista ......................................................... ................. ................................................................................... 5 Obtener las vistas..................... 5 Obtener los Roles que se puede conectar al servidor ................................................................................................................................................................. ........................................................................ 8 Obtener detalles de las vistas...................................................... 9 Obtener detalles de las secuencias............................................................................................ 5 Obtener los tablespace del servidor ................................... 7 Obtener los tipos de datos...............Índice de Contenido Introducción ................................................................................................................ .............. 10 Obtener detalles de los índices.......................................................................................... .... 10 Obtener detalles de privilegios de los objetos ............................................................. 10 Obtener los privilegios de una tabla ................................ 9 Obtener detalles de las funciones................................................................................................................................................ 5 Obtener los esquemas.................................................................................................. 5 Obtener los Grupos que existes en el servidor ......................................................................................................................................................................................................... ............................. 5 Obtener objetos de las bases de datos.............. 5 Obtener los lenguajes del servidor ..... ............................................................................................. ...... 6 Obtener las secuencias............................ 9 Obtener detalles de los trigger...... 6 Obtener las reglas............. ........................... ......... 11 ............................................................................................................ .......................................................... 7 Obtener detalles de los esquemas............................................................................................................................................................. ............................................................... ............................. 7 Obtener detalles de las tablas......................................................................................................................................... ............................................................................................. ............... ........................................................... 4 Obtener objetos del servidor PostgreSQL............ 5 Obtener las tablas.................................... 5 Obtener las funciones.. 5 Obtener las bases de datos disponibles .... 5 Obtener los trigger............ ....................... 7 Obtener detalles de los objetos ................................................................ 7 Obtener índices.................................................................. 6 Obtener los dominios................................................................................................ 10 Consultas útiles de monitoreo..................................................................................................................... 10 Obtener los privilegios de las funciones ....

...................................................................................... 11 Saber la cantidad estimada de tuplas por tablas y las tuplas muertas .................................. 11 Peso de las tablas .................... 12 ........................................................................................................... IP y consulta ......................................................................................................................... 11 Peso de las base de datos del servidor ...................................... 12 Bibliografía .................................Usuarios conectados................

la información que brindan es similar con algunas comodidades uno o el otro. Algunas tablas y vistas del catálogo(pg_catalog) Este compendio de consultas intenta de proveer algunas consultas útiles al catálogo para que los usuarios de PostgreSQL puedan comprender un poco mejor el funcionamiento de este maravilloso SGBD de código abierto y además puedan utilizarlas en sus aplicaciones. Puede ser tan útil como queramos pues realizando las consultas adecuadas se puede obtener cualquier detalle de nuestro servidor. tablas. Su función es almacenar los esquemas o descripciones de las BD que el SGBD mantiene. funciones. Por ejemplo las tablas del pg_catalog comienzan con el prefijo pg_. A continuación se muestra una imagen con alguna de las tablas y vistas. A los datos almacenados en él se les conoce como metadatos. permisos. Por ejemplo las bases de datos.Introducción El Catálogo de PostgreSQL una de las maravillas del mismo. cualquiera de los dos puede ser utilizado. Existen dos catálogos fundamentales el pg_catalog y el information_schema. etc. . es un conjunto de tablas y vistas que constituye el núcleo del SGBD.

Obtener objetos del servidor PostgreSQL. En esta sección se especifican los objetos dentro de una base de datos del servidor y se presentan algunas consultas útiles para su trabajo Obtener los esquemas. Obtener las bases de datos disponibles select datname from pg_database where datallowconn=true Obtener los Roles que se puede conectar al servidor select rolname from pg_roles where rolcanlogin=true Obtener los Grupos que existes en el servidor select rolname from pg_roles where rolcanlogin=false Obtener los tablespace del servidor select spcname from pg_tablespace Obtener los lenguajes del servidor select lanname from pg_language Obtener objetos de las bases de datos.tables where table_catalog='basedato' and table_schema not like 'pg_%' and table_schema<>'information_schema' and table_type='VIEW' Existen otras combinaciones con el pg_class Obtener las funciones.routines where .tables where table_catalog='basedato' and table_schema not like 'pg_%' and table_schema<>'information_schema' and table_type='BASE TABLE' Existen otras combinaciones con el pg_class Obtener las vistas. select specific_schema.schemata where catalog_name='basedato' and schema_name not like 'pg_%' and schema_name<>'information_schema' Obtener las tablas. select* from information_schema.routine_name from information_schema. select* from information_schema. select* from information_schema. En esta sección se especifican los objetos generales del servidor y se presentan algunas consultas útiles para su trabajo.

pg_function_is_visible(p.pg_namespace n ON n.pg_function_is_visible(p. pg_catalog.oid) AND n.prorettype<>'pg_catalog.relname as "Name".pg_proc p LEFT JOIN pg_catalog.pg_class c LEFT JOIN pg_catalog. SELECT sequence_schema. c.nspname as "Schema".routines where specific_catalog='basedato' and specific_schema not like 'pg_%' and specific_schema<>'information_schema' and routine_type='FUNCTION'and data_type='trigger' o SELECT n.relowner) as "propietario" FROM pg_catalog.nspname <> 'information_schema' AND p.pg_proc p LEFT JOIN pg_catalog.nspname <> 'information_schema' AND p.oid) Obtener los dominios.rolname as "Propietario" FROM pg_catalog.pg_namespace n ON n.nspname <> 'pg_catalog' AND n.oid) AND n.pg_get_userbyid(c.domains where domain_catalog='basedato' and domain_schema not like 'pg_%' and domain_schema<>'information_schema' .routine_name from information_schema.pg_namespace n ON n.proname as "Name".relnamespace WHERE c. p. u.nspname <> 'information_schema' AND n.oid=p.sequence_name from information_schema.prorettype='pg_catalog.nspname <> 'pg_catalog' AND n. p.pronamespace join pg_roles u on u. u.specific_catalog='basedato' and specific_schema not like 'pg_%' and specific_schema<>'information_schema' and routine_type='FUNCTION'and data_type<>'trigger' o SELECT n.nspname !~ '^pg_toast' AND pg_catalog.oid = p.proname as "Name".nspname <> 'pg_catalog' AND n.nspname as "Schema".relkind ='S' AND n.trigger'::pg_catalog.oid=p.oid = c.pg_table_is_visible(c.pronamespace join pg_roles u on u.sequences where sequence_catalog='basedato' o SELECT n.proowner WHERE pg_catalog.trigger'::pg_catalog. select specific_schema.regtype Obtener los trigger.rolname as "Propietario" FROM pg_catalog.regtype Obtener las secuencias.oid = p.nspname as "Schema".proowner WHERE pg_catalog. select * from information_schema.

nspname.pg_roles.nspname='equema' . select * from pg_rules where schemaname<>'information_schema' schemaname not like 'pg_%' and Obtener los tipos de datos.pg_roles where pg_namespace.nspname Obtener índices. select pg_type.typnamespace = pg_namespace.nspname. case typcategory when 'N' then 'numerico' when 'B' then 'booleano' when 'C' then 'compuesto' when 'D' then 'fecha/hora' when 'S' then 'string' when 'G' then 'geometrico' when 'E' then 'enumerativo' when 'I' then 'IP' when 'V' then 'string bit' ELSE 'otro' end as tipodedato from pg_type left join pg_namespace on (pg_type.oid and pg_namespace.Obtener las reglas.oid) where pg_type.rolname. select * from pg_indexes where schemaname<>'information_schema' schemaname not like 'pg_%' and Obtener detalles de los objetos Obtener detalles de los esquemas.nspowner=pg_roles.nspacl from pg_namespace. select pg_namespace.pg_namespace.typcategory<>'A' order by pg_namespace.pg_namespace.typname.

adnum = a.relname AS tabla.confrelid) as tablaforanea.attnum.data_type from information_schema.attisdropped ORDER BY a.relname from pg_class a where a.attnum > 0 AND NOT a. d. a.attnum AND a.conname as nombrellave .adrelid) for 128) FROM pg_catalog.a.adbin.relname AS tabla.oid=pg_constraint. case confmatchtype when 'u' then 'MATCH simple ' when 'f' then 'MATCH full' when 'p' then 'MATCH partial' end as tipo.contype = 'p'::"char") AND (pg_constraint.pg_attrdef d WHERE d. select ordinal_position. (SELECT substring(pg_catalog. case confdeltype when 'a' then 'no action ' when 'r' then 'restrict' when 'c' then 'cascade' when 'n' then 'set null' else .format_type(a.atttypid. pg_class WHERE ((pg_constraint.adrelid = a.pg_attribute a WHERE a. pg_class.conrelid = pg_class. pg_class.attname as campos.oid) as definicion.(select a. pg_get_constraintdef(pg_constraint. a. pg_catalog.conname FROM pg_constraint.attrelid = (select oid from pg_class where relname='tabla' ) AND a. pg_constraint.attnum (Campos llaves) primarios SELECT pg_get_constraintdef(pg_constraint.atthasdef) as pordefecto.oid). column_name.pg_get_expr(d.attnotnull as NULO FROM pg_catalog.Obtener detalles de las tablas.columns where table_schema='equema' and table_name='tabla' o SELECT a.atttypmod) as tipo.attrelid AND d.oid)) and relname='tabla' foráneos SELECT pg_constraint. case confupdtype when 'a' then 'no action ' when 'r' then 'restrict' when 'c' then 'cascade' when 'n' then 'set null' else 'default' end as onupdate .

pg_catalog.relnamespace WHERE c.definition as definicion from pg_views where viewname='vista' and schemaname='esquema' o SELECT n.regtype Obtener detalles de los trigger. pg_catalog. p.pg_namespace n ON n.pg_get_function_arguments(p.oid) AS definition FROM pg_class c LEFT JOIN pg_namespace n ON n.pg_function_is_visible(p.relname AS viewname.oid) AND n. c.'default' end as ondelete FROM pg_constraint.proisagg THEN 'agg' WHEN p. . pg_class WHERE ((pg_constraint. pg_get_viewdef(c.nspname as "Schema".conrelid = pg_class.nspname as "Schema".pronamespace join pg_language on ( p.relowner) AS viewowner.oid = p. pg_language.pg_get_function_result(p. p.lanname as lenguaje . pg_catalog.nspname <> 'information_schema' AND p.pg_get_functiondef(p. select viewname as nombre .oid) and relname='tabla') Obtener detalles de las vistas.proname as "Name".oid = c.oid) as "Result data type".contype = 'f'::"char") AND (pg_constraint. Obtener detalles de las funciones. SELECT n. pg_catalog.oid) as "Argument data types". pg_catalog.nspname <> 'information_schema'. p.oid) as "Argument data types".pg_proc p LEFT JOIN pg_catalog. SELECT n.trigger'::pg_catalog.prolang=pg_language.nspname AS schemaname.viewowner as propietario. CASE WHEN p.nspname <> 'pg_catalog' AND n.prorettype<>'pg_catalog.oid) as "Result data type".oid).oid).proname as "Name".pg_get_function_result(p. pg_catalog.pg_get_function_arguments(p.oid) WHERE pg_catalog.nspname <> 'pg_catalog' AND n.prosecdef FROM pg_catalog.relkind = 'v'::"char" and n. pg_get_userbyid(c.pg_get_functiondef(p.proiswindow THEN 'window' ELSE 'normal' END as "Type".

oid) WHERE pg_catalog.oid and a.oid) AND n.pg_proc p LEFT JOIN pg_catalog.tusecuencia Obtener detalles de los índices.condition_timing as momento.') as evento .nspname <> 'information_schema' .nspname <> 'information_schema' and relkind='v' Obtener los privilegios de las funciones select proname.prosecdef FROM pg_catalog. action_orientation as modo.pg_namespace a where pronamespace = a.prorettype='pg_catalog.relacl from pg_class.pg_namespace n ON n. proacl from pg_proc. array_to_string( array (select event_manipulation::"text" from information_schema.nspname <> 'pg_catalog' and a.nspname <> 'pg_catalog' AND n. 2.oid and a.pg_function_is_visible(p.triggers where trigger_name='cons' and trigger_schema='public' ). event_object_table as tabla.pronamespace join pg_language on ( p.pg_namespace a where relnamespace = a.trigger'::pg_catalog. select indexdef from pg_indexes where schemaname not like 'pg_%' and schemaname<>'information_schema' and indexname='nombreindice' Obtener detalles de privilegios de los objetos Obtener los privilegios de una tabla select relname.lanname as lenguaje .regtype ORDER BY 1.prolang=pg_language. SELECT * FROM public. p.triggers where trigger_name='cons' and trigger_schema='public' Obtener detalles de las secuencias.nspname <> 'pg_catalog' and a.relacl from pg_class where relname=’nombretabla’ Obtener los privilegios de una vista select relname.'. Y select distinct trigger_name .nspname <> 'information_schema' AND p. 4.pg_language.action_statement as accion from information_schema.oid = p.

client_addr from pg_stat_activity Peso de las base de datos del servidor SELECT distinct datname as "nombre de la base". CASE WHEN reltoastrelid=0 THEN 0 ELSE pg_relation_size((SELECT reltoastidxid FROM pg_class ct WHERE ct.oid=indrelid).nspname.oid) AS tablesize.relname. Usuarios conectados.nspname NOT IN ('pg_catalog'.tables WHERE table_type = 'BASE TABLE')) ss ORDER BY tablesize+indexsize+toastsize+toastindexsize DESC. CASE WHEN reltoastrelid=0 THEN 0 ELSE pg_relation_size(reltoastrelid) END AS toastsize. cl. IP y consulta select datname.relname IN (SELECT table_name FROM information_schema. 'information_schema') AND cl.Consultas útiles de monitoreo. 0) AS indexsize. Peso de las tablas SELECT nspname. COALESCE((SELECT SUM(pg_relation_size(indexrelid))::bigint FROM pg_index WHERE cl.oid = cl. pg_namespace ns WHERE cl.reltoastrelid)) END AS toastindexsize FROM pg_class cl.pg_size_pretty(pg_database_size(datname)) as "Tamaño de la base" from pg_stat_activity .current_query. relname.relnamespace = ns. pg_relation_size(cl. pg_size_pretty(tablesize+indexsize+toastsize+toastindexsize) AS totalsize FROM (SELECT ns. .usename.oid AND ns.

relname AS "Nombre de la tabla" .1 Documentation. .relnamespace = a.Saber la cantidad estimada de tuplas por tablas y las tuplas muertas SELECT pg.relname) join pg_namespace a on ( pg. The PostgreSQL Global Development Group Ayuda del psql.oid) where a. reltuples AS "Tuplas estimadas".nspname <> 'pg_catalog' and a. Puede consultar las vistas del catalogo “pg_stat_” que siempre almacenan detalles de las base de datos y sus cambios. n_dead_tup AS "Tuplas muertas" FROM pg_class pg JOIN pg_stat_all_tables psat ON (pg.0.nspname <> 'pg_toast' ORDER BY relpages DESC .nspname <> 'information_schema' and a.relname = psat. Bibliografía PostgreSQL 9.

Sign up to vote on this title
UsefulNot useful