Hello, Create a view as described @
http://www.postgresql.org/message-id/flat/3c055b7e.bb52f...@but.auc.dk#3c055b7e.bb52f...@but.auc.dk create view my_tbldescription as select u.usename, t.typname AS tblname, a.attname, a.atttypid, n.typname AS atttypname, int4larger(a.attlen, a.atttypmod - 4) AS atttyplen, a.attnotnull, a.attnum from pg_user u, pg_type t, pg_attribute a, pg_type n where u.usesysid = t.typowner and t.typrelid = a.attrelid and t.typtype = 'c' and not (t.typname ~* 'pg_') and n.typelem = a.atttypid and substr(n.typname, 1, 1) = '_' and a.attnum > 0 ; And then create functions using that view. create or replace function table_exists (tbl varchar) returns boolean AS $$ DECLARE x integer; BEGIN Execute 'select count(*) from my_tbldescription where tblname=$1' into x using tbl; if (x>0) then RETURN TRUE; else RETURN FALSE; end if; END; $$ LANGUAGE plpgsql; create or replace function column_exists (col varchar) returns boolean AS $$ DECLARE x integer; BEGIN Execute 'select count(*) from my_tbldescription where attname=$1' into x using col; if (x>0) then RETURN TRUE; else RETURN FALSE; end if; END; Regards Sameer