--
-- procedure util__table_exists/1
--
CREATE OR REPLACE FUNCTION util__table_exists(
name text
) RETURNS boolean AS $$
DECLARE
v_schema varchar;
v_tablename varchar;
BEGIN
IF (position('.' in name) = 0) THEN
--
-- table without a schema name
--
return exists (
select 1 from pg_class
where relname = name
and pg_table_is_visible(oid));
ELSE
--
-- table with schema name
--
SELECT split_part(name, '.', 1) into v_schema;
SELECT split_part(name, '.', 2) into v_tablename;
return exists (
select 1 from information_schema.tables
where table_schema = v_schema
and table_name = v_tablename);
END IF;
END;
$$ LANGUAGE plpgsql;
--
-- procedure util__table_column_exists/1
--
CREATE OR REPLACE FUNCTION util__table_column_exists(
p_table text,
p_column text
) RETURNS boolean AS $$
DECLARE
v_schema varchar;
v_tablename varchar;
BEGIN
IF (position('.' in p_table) = 0) THEN
--
-- table without a schema name
--
return exists (
select 1 from information_schema.columns c
where table_name = lower(p_table)
and column_name = lower(p_column));
ELSE
--
-- table with schema name
--
SELECT split_part(p_table, '.', 1) into v_schema;
SELECT split_part(p_table, '.', 2) into v_tablename;
return exists (
select 1 from information_schema.columns
where table_name = lower(v_tablename)
and column_name = lower(p_column)
and table_schema = v_schema);
END IF;
END;
$$ LANGUAGE plpgsql;
--
-- procedure util__view_exists/1
--
CREATE OR REPLACE FUNCTION util__view_exists(
name text
) RETURNS boolean AS $$
DECLARE
v_schema varchar;
v_tablename varchar;
BEGIN
IF (position('.' in name) = 0) THEN
--
-- view without a schema name
--
return exists (
select 1 from pg_views where viewname = name);
ELSE
--
-- table with schema name
--
SELECT split_part(name, '.', 1) into v_schema;
SELECT split_part(name, '.', 2) into v_tablename;
return exists (
select 1 from information_schema.views
where table_name = lower(v_tablename)
and table_schema = v_schema);
END IF;
END;
$$ LANGUAGE plpgsql;