Re: consulta de validacion de inexistencia de campos

From: Jenaro Centeno Gomez <jcenteno(at)aldia(dot)com(dot)mx>
To: Marcos Saldivar <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com>
Cc: List Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: consulta de validacion de inexistencia de campos
Date: 2008-03-15 19:00:17
Message-ID: 47DC1CC1.7010200@aldia.com.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Como siempre:
1. RTFM
2. Google, y
3. Busca a alguien que haga 1 y 2 por ti. ( No es regaño ni algo por el
estilo, simple Brain Refresh :D)

Si quieres saber que campos tiene una tabla puedes hacer desde psql \d
<NOMBRE_TABLA>, o puedes utilizar esto:

SELECT a.attname as nombre_campo,
t.typname as tipo_dato,
CASE
WHEN cc.contype= 'p' THEN 'PRIMARIA'
WHEN cc.contype= 'u' THEN 'UNICA'
WHEN cc.contype= 'f' THEN 'LLAVE FORANEA'
ELSE '' END AS tipo_campo,
CASE
WHEN a.attnotnull= false THEN 'SI'
ELSE 'NO' END AS es_nulo,
CASE
WHEN a.attlen= '-1' THEN (a.atttypmod - 4)
ELSE a.attlen END as longitud,
d.adsrc as valor_default
FROM pg_catalog.pg_attribute a
LEFT JOIN pg_catalog.pg_type t ON t.oid = a.atttypid
LEFT JOIN pg_catalog.pg_class c ON c.oid = a.attrelid
LEFT JOIN pg_catalog.pg_constraint cc ON cc.conrelid = c.oid AND
cc.conkey[1] = a.attnum
LEFT JOIN pg_catalog.pg_attrdef d ON d.adrelid = c.oid AND a.attnum =
d.adnum
WHERE c.relname = '<NOMBRE_TABLA>' AND a.attnum > 0 AND t.oid = a.atttypid;

Y con eso te va a dar la estructura de la tabla, de ahí creo que puedes
hacer todo lo demás que necesitas.

Lo que encuentra uno cuando busca.

P.D.: No olvides cambiar <NOMBRE_TABLA> por el nombre de la tabla que
quieres consultar.

Marcos Saldivar wrote:
> Estimad@ de la lista en esta oprtunidad escribo mas por opiniones que
> un problema, ya que tengo el siguiente caso(tipico):
>
> Para una tabla empleados tengo los campos, rut, username y
> nom_empleado definidos como unicos y not null menos el username que si
> puede ser null ya que un empleado quisas no sea necesario que ingrese
> al sistema que desarrollo. pues bien trabajo en java(y obvió que con
> postgresql 8.3) y al momento de ingresar un nuevo usuario quiero
> validar la inexistencia de los campos que mencione(podría capturar un
> exeception pero creo que no es muy elegante llenar mi código de try
> catch) pero como ya saben la flojera puede mas el hacer una consulta
> por cada campo no me gusto, así que me puse a buscar una consulta
> donde pudiera matar 3 pajaros de un tiro y aunque al principio buscaba
> una consulta que me entregara algo como:
>
> rut | nombre | username
> -----+--------+----------
> si | no | si
> (1 fila)
>
> pero bien mis habilidades no me permitió llegar a esto, si no que algo
> similar a hacer 3 consultas en una, pero con union y evitar tener que
> enviar tres consultas por separado, osea mi solucion quedo asi:
>
> select rut as existe from vista_empleados where rut = '16560721-k'
> union select nombre from vista_empleados where nombre = 'vida guerra'
> union select username from vista_empleados where username = 'conexion';
>
> existe
> -------------
> 16560721-k
> conexion
> vida guerra
> (3 filas)
>
> Ya con esta consulta puedo saber cuales existen y cuales no pero no se
> si sera lo mejor y practico ya que como misioné mi búsqueda partió en
> algo muy distinto(un resultado del tipo, si,no,si) y por eso apelo a
> sus experiencias para buscar una mejor solucion o simplemente
> compartir la mia...
>
> Saludos a todos.-
>
> ps: intente usar intersect, pero al final llegue al mismo resultado que este....
> --
> TIP 8: explain analyze es tu amigo
>
>
>

Attachment Content-Type Size
jcenteno.vcf text/x-vcard 485 bytes

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marcos Saldivar 2008-03-15 19:29:42 Re: consulta de validacion de inexistencia de campos
Previous Message Arniel Serrano Hernandez 2008-03-15 18:16:58 RE: Duda con herencia