diff --git a/scripts-available/CDB_ColumnNames.sql b/scripts-available/CDB_ColumnNames.sql index ce74216..c35ba99 100644 --- a/scripts-available/CDB_ColumnNames.sql +++ b/scripts-available/CDB_ColumnNames.sql @@ -2,15 +2,13 @@ CREATE OR REPLACE FUNCTION CDB_ColumnNames(REGCLASS) RETURNS SETOF information_schema.sql_identifier AS $$ - - SELECT c.column_name - FROM information_schema.columns c, pg_class _tn, pg_namespace _sn - WHERE table_name = _tn.relname - AND table_schema = _sn.nspname - AND _tn.oid = $1::oid - AND _sn.oid = _tn.relnamespace - ORDER BY ordinal_position; - + SELECT + a.attname::information_schema.sql_identifier column_name + FROM pg_class c + LEFT JOIN pg_attribute a ON a.attrelid = c.oid + WHERE c.oid = $1::oid + AND a.attstattarget < 0 -- exclude system columns + ORDER BY a.attnum; $$ LANGUAGE SQL; -- This is to migrate from pre-0.2.0 version diff --git a/scripts-available/CDB_ColumnType.sql b/scripts-available/CDB_ColumnType.sql index 8ddc36b..19b8934 100644 --- a/scripts-available/CDB_ColumnType.sql +++ b/scripts-available/CDB_ColumnType.sql @@ -2,15 +2,13 @@ CREATE OR REPLACE FUNCTION CDB_ColumnType(REGCLASS, TEXT) RETURNS information_schema.character_data AS $$ - - SELECT c.data_type - FROM information_schema.columns c, pg_class _tn, pg_namespace _sn - WHERE table_name = _tn.relname - AND table_schema = _sn.nspname - AND column_name = $2 - AND _tn.oid = $1::oid - AND _sn.oid = _tn.relnamespace; - + SELECT + format_type(a.atttypid, NULL)::information_schema.character_data data_type + FROM pg_class c + LEFT JOIN pg_attribute a ON a.attrelid = c.oid + WHERE c.oid = $1::oid + AND a.attname = $2 + AND a.attstattarget < 0; -- exclude system columns $$ LANGUAGE SQL; -- This is to migrate from pre-0.2.0 version diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 699ca5c..0e692e7 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -520,15 +520,14 @@ CREATE OR REPLACE FUNCTION _cdb_unlimited_text_column(reloid REGCLASS, col_name RETURNS BOOLEAN AS $$ SELECT EXISTS ( - SELECT * - FROM information_schema.columns c, pg_class _tn, pg_namespace _sn - WHERE table_name = _tn.relname - AND table_schema = _sn.nspname - AND c.column_name = col_name - AND _tn.oid = reloid - AND _sn.oid = _tn.relnamespace - AND character_maximum_length IS NULL - AND c.data_type IN ('text', 'character varying', 'character') + SELECT a.attname + FROM pg_class c + LEFT JOIN pg_attribute a ON a.attrelid = c.oid + LEFT JOIN pg_type t ON t.oid = a.atttypid + WHERE c.oid = reloid + AND a.attname = col_name + AND format_type(a.atttypid, NULL) IN ('text', 'character varying', 'character') + AND format_type(a.atttypid, NULL) = format_type(a.atttypid, a.atttypmod) ); $$ LANGUAGE SQL STABLE;