create or replace function comment(reference regclass, target_id uuid, created_by_id uuid, content text, parent_id uuid default null, out id uuid) language plpgsql as $$ declare _created_by_id alias for created_by_id; _target_id alias for target_id; _content alias for content; _parent_id alias for parent_id; _id alias for id; begin if reference = 'article'::regclass then insert into comment_on_article (created_by_id, target_id, content, parent_id) values (_created_by_id, _target_id, _content, _parent_id) returning comment_on_article.id into _id; elseif reference = 'constitution'::regclass then insert into comment_on_constitution (created_by_id, target_id, content, parent_id) values (_created_by_id, _target_id, _content, _parent_id) returning comment_on_constitution.id into _id; else raise exception 'comment with target as "%", is no implemented', reference::text; end if; end; $$; -- drop function if exists comment(regclass, uuid, uuid, text, uuid);