CREATE OR REPLACE FUNCTION ver_versioned_table_add_column( p_schema_name NAME, p_table_name NAME, p_column_name NAME, p_column_datatype TEXT ) RETURNS BOOLEAN AS $$ DECLARE v_key_col NAME; v_trigger_name TEXT; v_revision_table TEXT; BEGIN IF NOT @extschema@.ver_is_table_versioned(p_schema_name, p_table_name) THEN RAISE EXCEPTION 'Table %.% is not versioned', quote_ident(p_schema_name), quote_ident(p_table_name); END IF; v_revision_table := @extschema@.ver_get_version_table_full(p_schema_name, p_table_name); v_trigger_name := @extschema@._ver_get_version_trigger(p_schema_name, p_table_name); EXECUTE 'ALTER TABLE ' || quote_ident(p_schema_name) || '.' || quote_ident(p_table_name) || ' DISABLE TRIGGER ' || v_trigger_name; EXECUTE 'ALTER TABLE ' || quote_ident(p_schema_name) || '.' || quote_ident(p_table_name) || ' ADD COLUMN ' || quote_ident(p_column_name) || ' ' || p_column_datatype; EXECUTE 'ALTER TABLE ' || v_revision_table || ' ADD COLUMN ' || quote_ident(p_column_name) || ' ' || p_column_datatype; EXECUTE 'ALTER TABLE ' || quote_ident(p_schema_name) || '.' || quote_ident(p_table_name) || ' ENABLE TRIGGER ' || v_trigger_name; SELECT key_column INTO v_key_col FROM @extschema@.versioned_tables WHERE schema_name = p_schema_name AND table_name = p_table_name; PERFORM @extschema@.ver_create_table_functions(p_schema_name, p_table_name, v_key_col); PERFORM @extschema@.ver_create_version_trigger(p_schema_name, p_table_name, v_key_col); RETURN TRUE; END; $$ LANGUAGE plpgsql;