Grupo Linuxero del Bajío

Focus on PostgreSQL I

jacob israel cervantes luevano

a veces es necesario conocer que funciones y/o procedimientos almacenados que tienes sobre PostgreSQL. una forma de saberlo es ejecutando la terminal o herramienta canónica para trabajar en linea de comandos con PostgreSQL, una vez en la terminal ejecutamos la siguiente instrucción:

MiBaseDatos=#df public.* (suponiendo que añadiste las funciones bajo el esquema public)

esto arroja los siguientes resultados…….

BlastDB=# df public.*List of functions-[ RECORD 1 ]-------+------------------------------------------------------------------------------------------------------------------------------------------------------Schema                     | publicName                        | insert_tbl_blastdbResult data type         | voidArgument data types  | fdb_name character varying, fquery_id character varying, fquery_def character varying, fquery_len integer, fblastdb_details_id integer.........etc

lo cual nos permite conocer que funciones hemos dado de alta en PostgreSQL, ahora para ver el código que escribimos para esa función usamos la siguiente consulta desde la terminal interactiva de PostgreSQL:

BlastDB=# select * FROM pg_proc WHERE proname = 'insert_tbl_blastdb';

los resultados son los siguientes:

proname        | insert_tbl_blastdbpronamespace   | 2200proowner       | 10prolang        | 17062proisagg       | fprosecdef      | fproisstrict    | fproretset      | fprovolatile    | vpronargs       | 10prorettype     | 2278proargtypes    | 1043 1043 1043 23 23 23 23 23 23 1114proallargtypes | proargmodes    | proargnames    | {fdb_name,fquery_id,fquery_def,fquery_len,fblastdb_details_id,fblastdb_parameters_id,fblastdb_iterations_id,fblastdb_info_id,fblastdb_diagram_id,fdb_date}prosrc         |                : BEGIN               : x09x09               : x09INSERT INTO tbl_blastdb(db_name,"blastdb_details.id","blastdb_parameters.id","blastdb_iterations.id","blastdb_info.id","blastdb_diagram.id",db_date)               : x09VALUES(fdb_name,fblastdb_details_id,fblastdb_parameters_id,fblastdb_iterations_id,fblastdb_info_id,fblastdb_diagram_id,fdb_date);               : x09               : x09INSERT INTO tbl_blastdb_details(db_name,query_id,query_def,query_len)               : x09VALUES(fdb_name,fquery_id,fquery_def,fquery_len);               : x09RETURN;               : END;               : probin         | -proacl         |

y esto es muy interesante porque pueden ver el código de su función, así como los tipos de datos de los parámetros, su código asociado y mas variables importantes.pg_proc es una tabla dentro del namespace pg_catalog que contiene los siguientes campos:

BlastDB=# d pg_catalog.pg_proc       Table "pg_catalog.pg_proc"     Column     |   Type    | Modifiers ----------------+-----------+----------- proname        | name      | not null pronamespace   | oid       | not null proowner       | oid       | not null prolang        | oid       | not null proisagg       | boolean   | not null prosecdef      | boolean   | not null proisstrict    | boolean   | not null proretset      | boolean   | not null provolatile    | "char"    | not null pronargs       | smallint  | not null prorettype     | oid       | not null proargtypes    | oidvector | not null proallargtypes | oid[]     |  proargmodes    | "char"[]  |  proargnames    | text[]    |  prosrc         | text      |  probin         | bytea     |  proacl         | a*censored*em[] | Indexes:    "pg_proc_oid_index" UNIQUE, btree (oid)    "pg_proc_proname_args_nsp_index" UNIQUE, btree (proname, proargtypes, pronamespace)

por ejemplo el campo proname mantiene el nombre de la función, mientras que el campo prosrc mantiene el codigo fuente de la función..entre varios campos mas.Saludos a todos!!!!!!!!