La respuesta es tan util que cabe mencionar que aplica a cualquier motor de bases de datos que posea information_schema... hasta con sql server 2005 funciona esto. saludos. --
Carlos Enrique Perez Direccion Syswarp SRL www.syswarp.com.ar "Cuando está bien hecho, el software es invisible" El mar, 22-05-2012 a las 14:24 +0100, Alejandro Carrillo escribió: > Te vuelvo a repetir la respuesta COMPLETA: > > > 1) Te recomiendo no tomes este hilo para hacer esta pregunta. Crea uno > nuevo y publicalo en la lista. > 2) Si todas las tablas tienen triggers(es decir, cuando borras las > padre se activa el trigger que alamcena cada tabla hija en el log), > podrías crear una function que recupere la info que esté borrada, > teniendo en cuenta las relaciones ACTUALES EN EL MODELO DE LA BD. > > > > Para consultar las tablas que son hijas de la tabla padre: > SELECT > tc.constraint_name, tc.table_name, kcu.column_name, > ccu.table_name AS NOMBRETABLAFORANEA, > ccu.column_name AS NOMBRECOLFORANEA > ,CCU.* > FROM > information_schema.table_constraints AS tc > JOIN information_schema.key_column_usage AS kcu ON > tc.constraint_name = kcu.constraint_name > JOIN information_schema.constraint_column_usage AS ccu ON > ccu.constraint_name = tc.constraint_name > WHERE constraint_type = 'FOREIGN KEY' AND ccu.table_name='clientes' > AND CCU.TABLE_SCHEMA ='public' ; > > > Tomado de: > http://stackoverflow.com/questions/1152260/postgres-sql-to-list-table-foreign-keys > > Modifique para que permitiera consultar por schemas. > > > ó > > SELECT fkn.nspname AS fk_namespace, fkr.relname AS fk_relation, > fka.attname AS fk_column, fka.attnotnull AS fk_notnull, > (EXISTS (SELECT pg_index.indexrelid, pg_index.indrelid, > pg_index.indkey, pg_index.indclass, pg_index.indnatts, > pg_index.indisunique, pg_index.indisprimary, pg_index.indisclustered, > pg_index.indexprs, pg_index.indpred FROM pg_index WHERE > ((pg_index.indrelid = fkr.oid) AND (pg_index.indkey[0] = > fka.attnum)))) AS fk_indexed, > pkn.nspname AS pk_namespace, pkr.relname AS pk_relation, pka.attname > AS pk_column, > (EXISTS (SELECT pg_index.indexrelid, pg_index.indrelid, > pg_index.indkey, pg_index.indclass, pg_index.indnatts, > pg_index.indisunique, pg_index.indisprimary, pg_index.indisclustered, > pg_index.indexprs, pg_index.indpred FROM pg_index WHERE > ((pg_index.indrelid = pkr.oid) AND (pg_index.indkey[0] = > pka.attnum)))) AS pk_indexed, > ((c.confupdtype)::text || (c.confdeltype)::text) AS ud, cn.nspname > AS c_namespace, c.conname AS c_name > FROM (((((((pg_constraint c JOIN pg_namespace cn ON ((cn.oid = > c.connamespace))) JOIN pg_class fkr ON ((fkr.oid = c.conrelid))) > JOIN pg_namespace fkn ON ((fkn.oid = fkr.relnamespace))) JOIN > pg_attribute fka ON (((fka.attrelid = c.conrelid) AND (fka.attnum = > ANY (c.conkey))))) > JOIN pg_class pkr ON ((pkr.oid = c.confrelid))) JOIN pg_namespace > pkn ON ((pkn.oid = pkr.relnamespace))) JOIN pg_attribute pka ON > (((pka.attrelid = c.confrelid) > AND (pka.attnum = ANY (c.confkey))))) WHERE (c.contype = > 'f'::"char") and pkn.nspname ='public' and pkr.relname ='clientes'; > > > Tomado de: http://code.google.com/p/pgutils/downloads/list > > Modifique para que permitiera consultar por schema y tabla. > > > La solución sería: Cuando se recupere una tabla padre, se deben > recuperar todos los registros de las tablas hijas. Para saber cuales > son las tablas hijas, ahi estan las consultas. Aunque podrías hacer la > inversa para recuperar un registro, verifique las tablas padre de esta > tabla y recupere esos registros de ls tablas padre y luego recupere el > registro de la tabla hija. > > > Cuidate > > > > > ______________________________________________________________________ > De: Alexis Camue <aca...@estudiantes.uci.cu> > Para: Alejandro Carrillo <faster...@yahoo.es> > Enviado: Domingo 20 de Mayo de 2012 0:08 > Asunto: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] > Efectuar copy desde un archivo con más columnas que la tabla > > > > Buenas le escribo porque tengo una duda con postgres: > > > Le explico mi problema: > Tengo hecha una aplicación que controla las operaciones (INSERT, > UPDATE, DELETE) realizadas en una base de datos postgreSQL a travéz de > triggers. Todos estos datos son guardados en tablas de manera tal que > en esa base datos no se pierda información y que el usuario pueda > recuperarla cuando desee. Ej: Un usuario borra de una tabla PERSONA a > la PERSONA(id=1, nombre =alejandro), estos datos a travéz de triggers > se guardan en una tabla creada con anterioridad llamada > PERSONA_delete, si el usuario quiere deshacer esta acción, selecciona > desde la aplicación este registro guardado y lo recupera (La > aplicación se encarga de hacer esto a travéz de una consulta insert). > Esto me funciona perfecto en una base de datos con tablas NO > RELACIONADAS pero cuando voy a recuperar una entidad que pertenece a > una tabla X que presenta una relación z con la tabla Y, postgre me > envia error de primary key, forein key etc. Pienso que esto tenga que > ver con borrar e insertar en CASCADA, pero desconozco como funciona > este proceso y no he podido encontrar una bibliografia o pagina donde > se explique este proceso para poder automatizarlo (si se puede) tiene > usted alguna idea de como es__???. > > Le agradecería cualquier contribución al respecto. > > > > > saludos > > > > > > "Quien quiere hacer busca medios...quien no quiere hacer busca > justificaciones" > "Cada persona desconocida, es un amigo esperando por ti" > > > Alexis Camué Hernandez > apto: 102 206 > Telf: (837)2926 > Universidad de Ciencias Informáticas > > > > ______________________________________________________________ > De: Alexis Camue <aca...@estudiantes.uci.cu> > Para: Ivan Perales M. <ivan.pera...@gmail.com> > CC: Ayuda Esp PostgreSQL <pgsql-es-ayuda@postgresql.org> > Enviado: Lunes 21 de Mayo de 2012 13:12 > Asunto: [pgsql-es-ayuda] Consulta SQL > > > > > Buenas lista: > Me pueden ayudar con alguna consulta que dada una tabla A me > devuelva el nombre de las tablas que se relacionan con esta, > por supuesto, en el caso que no tenga relaciones no devuelve > nada. > Gracias de antemano... > > > > "Quien quiere hacer busca medios...quien no quiere hacer busca > justificaciones" > "Cada persona desconocida, es un amigo esperando por ti" > > > Alexis Camué Hernandez > apto: 102 206 > Telf: (837)2926 > Universidad de Ciencias > Informáticas > > > > > > ______________________________________________________________ > > De: "Ivan Perales M." <ivan.pera...@gmail.com> > Para: "Ayuda Esp PostgreSQL" <pgsql-es-ayuda@postgresql.org> > Enviados: Lunes, 21 de Mayo 2012 13:13:03 > Asunto: [pgsql-es-ayuda] Substring en bytea > > > Hola lista buen día, acudo a ustedes por la siguiente > cuestión. > Estoy trabajando con java, en una columna de tipo bytea > inserto los datos binarios de archivos adjuntos, se que no es > Lo mejor pero por el momento es Lo que tenemos. En está > columna voy agregando la información con algo como data = data > ¦¦ :newdata. Esto funciona bien ya que al hacer un length me > devuelve los bytes del tamaño del archivo. > Pero cuando trato de obtener la información con un substring, > supongamos de > 100 kb, substring(data from 1 for 102400) en postgres me > devuelve los 100 kb exactos, pero en java obtengo un array > como de 199 kb y esto pues ya es erróneo. > Tendrá algo que ver que la bd este en utf? O sí no, conocen > alguna herramienta para leer de forma exadecimal el valor de > un byeta y comparar contra Lo que obtengo en java? > Saludos y de antemano gracias > Solo existen 10 tipos de personas en el mundo, las que saben > binario y las que no. > > > > > > > > > > > > > >