Puedes hacer esta:

select 'ALTER TABLE ' || 'public' || '.' || t.tablename || ' ADD COLUMN
tu_columna tipo_dato;'
from
(SELECT tablename FROM pg_tables WHERE schemaname = 'public') t

Con esto generas las sentencias que necesitas para agregar el campo.

Saludos.

2016-04-13 8:36 GMT-04:30 Jorge Gonzalez <jgonza...@itecnologica.com>:

> Buenos días Mauricio porque no pruebas con esta vista??
>
> -- View: v_tablas
>
> -- DROP VIEW v_tablas;
>
> CREATE OR REPLACE VIEW v_tablas AS
>  SELECT n.nspname AS schmema,
>     c.relname AS name,
>     a.attnum AS id,
>     a.attname AS column_name,
>     t.typname AS column_type,
>         CASE
>             WHEN (a.atttypmod - 4) < 0 THEN 0
>             ELSE a.atttypmod - 4
>         END AS type_lenght,
>     ( SELECT COALESCE(( SELECT d.adsrc
>                    FROM pg_attrdef d
>                   WHERE d.adrelid = c.oid AND d.adnum = a.attnum),
> ''::text) AS "coalesce") AS default_value,
>     a.attnotnull AS not_null,
>         CASE
>             WHEN (( SELECT count(DISTINCT sqa.attname) AS count
>                FROM pg_class sqc1,
>                 pg_attribute sqa
>               WHERE sqa.attrelid = sqc1.oid AND sqa.attname = a.attname
> AND (sqc1.oid IN ( SELECT sqi.indexrelid
>                        FROM pg_index sqi,
>                         pg_class sqc2,
>                         pg_namespace sqn
>                       WHERE sqc2.relname ~~* c.relname::text AND sqc2.oid
> = sqi.indrelid AND sqi.indisunique = true AND sqn.nspname ~~*
> "current_schema"()::text)))) > 0 THEN true
>             ELSE false
>         END AS "unique",
>         CASE
>             WHEN (( SELECT count(DISTINCT sqa.attname) AS count
>                FROM pg_class sqc1,
>                 pg_attribute sqa
>               WHERE sqa.attrelid = sqc1.oid AND sqa.attname = a.attname
> AND (sqc1.oid IN ( SELECT sqi.indexrelid
>                        FROM pg_index sqi,
>                         pg_class sqc2,
>                         pg_namespace sqn
>                       WHERE sqc2.relname ~~* c.relname::text AND sqc2.oid
> = sqi.indrelid AND sqi.indisprimary = true AND sqn.nspname ~~*
> "current_schema"()::text)))) > 0 THEN true
>             ELSE false
>         END AS primary_key,
>     ( SELECT COALESCE(( SELECT sqd.description
>                    FROM pg_description sqd
>                   WHERE sqd.objoid = a.attrelid AND sqd.objsubid =
> a.attnum), ''::text) AS "coalesce") AS description,
>     ( SELECT COALESCE(( SELECT sqcf.relname
>                    FROM pg_attribute sqa
>                      JOIN pg_class sqc ON sqc.oid = sqa.attrelid AND
> sqc.relkind = 'r'::"char"
>                      JOIN pg_namespace sqn ON sqn.oid = sqc.relnamespace
>                      JOIN pg_constraint sqct ON sqct.conrelid =
> sqa.attrelid AND sqct.confrelid <> 0::oid AND sqct.conkey[1] = sqa.attnum
>                      JOIN pg_class sqcf ON sqcf.oid = sqct.confrelid AND
> sqcf.relkind = 'r'::"char"
>                      JOIN pg_namespace sqnf ON sqnf.oid = sqcf.relnamespace
>                      JOIN pg_attribute sqaf ON sqaf.attrelid =
> sqct.confrelid AND sqaf.attnum = sqct.confkey[1]
>                   WHERE sqn.nspname ~~* "current_schema"()::text AND
> sqc.relname ~~* c.relname::text AND sqa.attname ~~* a.attname::text),
> ''::name) AS "coalesce") AS foreign_table,
>     ( SELECT COALESCE(( SELECT sqaf.attname
>                    FROM pg_attribute sqa
>                      JOIN pg_class sqc ON sqc.oid = sqa.attrelid AND
> sqc.relkind = 'r'::"char"
>                      JOIN pg_namespace sqn ON sqn.oid = sqc.relnamespace
>                      JOIN pg_constraint sqct ON sqct.conrelid =
> sqa.attrelid AND sqct.confrelid <> 0::oid AND sqct.conkey[1] = sqa.attnum
>                      JOIN pg_class sqcf ON sqcf.oid = sqct.confrelid AND
> sqcf.relkind = 'r'::"char"
>                      JOIN pg_namespace sqnf ON sqnf.oid = sqcf.relnamespace
>                      JOIN pg_attribute sqaf ON sqaf.attrelid =
> sqct.confrelid AND sqaf.attnum = sqct.confkey[1]
>                   WHERE sqn.nspname ~~* "current_schema"()::text AND
> sqc.relname ~~* c.relname::text AND sqa.attname ~~* a.attname::text),
> ''::name) AS "coalesce") AS foreign_column
>    FROM pg_class c,
>     pg_namespace n,
>     pg_attribute a,
>     pg_type t
>   WHERE c.relkind = 'r'::"char" AND n.oid = c.relnamespace AND a.attrelid
> = c.oid AND a.atttypid = t.oid AND a.attnum > 0 AND NOT a.attisdropped
>   ORDER BY c.relname, a.attnum;
>
> ALTER TABLE v_tablas
>   OWNER TO postgres;
>
>
> 2016-04-12 18:03 GMT-04:30 mauricio pullabuestan <jmaurici...@yahoo.es>:
>
>> Buen día.
>>
>> Necesito crear un campo en todas que no tengan un campo en concreto para
>> ello tengo 2 funciones, el problema se da es que la funcion
>> campo_check_fnc me devuelve también las vista y se produce un error.
>>
>> Como puedo fitrar que solo me devuelva tablas.
>>
>> CREATE OR REPLACE FUNCTION public.campo_check_fnc()
>> RETURNS void AS
>> $BODY$
>> DECLARE rs RECORD;
>> BEGIN
>> FOR rs IN
>> (
>>  SELECT table_schema, table_name
>>   FROM information_schema.columns
>>    Where table_schema Not In ('pg_catalog', 'information_schema',
>> 'public', 'prueba')
>>      And table_schema || table_name Not IN
>>    (Select t.table_schema || t.table_name
>>      From
>>       (
>>        SELECT table_schema, table_name, column_name = 'mi_campo' As
>> existe_campo
>>         FROM information_schema.columns
>>          Where table_schema Not In ('pg_catalog', 'information_schema',
>> 'public', 'prueba')
>>        ) t
>>       Where t.existe_campo = TRUE
>>    )
>>  GROUP BY table_schema, table_name
>>   ORDER BY table_schema, table_name ) LOOP
>>
>> PERFORM * FROM public.campo_crea_fnc(rs.table_schema::VARCHAR,
>> rs.table_name::VARCHAR);
>> END LOOP;
>> END;
>> $BODY$
>> LANGUAGE plpgsql VOLATILE
>> COST 100;
>> ALTER FUNCTION public.migracion_campo_check_fnc()
>> OWNER TO postgres;
>>
>>
>>
>>
>> CREATE OR REPLACE FUNCTION public.campo_crea_fnc(
>> p_schema character varying,
>> p_tabla character varying)
>> RETURNS void AS
>> $BODY$
>> BEGIN
>>
>> EXECUTE 'ALTER TABLE ' || p_schema || '.' || p_tabla || ' ADD COLUMN
>> mi_campo CHAR(2) DEFAULT ''NO''';
>> END;
>> $BODY$
>> LANGUAGE plpgsql VOLATILE
>> COST 100;
>>
>> Saludos.
>> Mauricio
>>
>> -
>> Enviado a la lista de correo pgsql-es-ayuda (
>> pgsql-es-ayuda@postgresql.org)
>> Para cambiar tu suscripción:
>> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>>
>
>
>
> --
> Ing. Jorge A. González V.
> Especialista de Base de Datos
> Gerencia de Tecnología
> Oficina (Máster): +58 (251) 232 16 34
> Oficina (Directo): +58 (251) 250 43 99
> *Móvil: *+584261534450
> Fax: +58 (251) 231 77 64
>



-- 
Ing. Jorge A. González V.
Especialista de Base de Datos
Gerencia de Tecnología
Oficina (Máster): +58 (251) 232 16 34
Oficina (Directo): +58 (251) 250 43 99
*Móvil: *+584261534450
Fax: +58 (251) 231 77 64

Responder a