-- DROP FUNCTION public.search_columns(text, name[], name[], name[]); CREATE OR REPLACE FUNCTION public.search_columns(IN needle text, IN haystack_col umns name[] DEFAULT '{}'::name[], IN haystack_tables name[] DEFAULT '{}'::name[] , IN haystack_schema name[] DEFAULT '{public}'::name[]) RETURNS TABLE(schemaname text, tablename text, columnname text, rowctid text) AS $BODY$ begin FOR schemaname,tablename,columnname IN SELECT c.table_schema,c.table_name,c.column_name FROM information_schema.columns c JOIN information_schema.tables t ON (t.table_name=c.table_name AND t.table_schema=c.table_schema) WHERE (c.table_name=ANY(haystack_tables) OR haystack_tables='{}') AND c.table_schema=ANY(haystack_schema) AND (c.column_name=ANY(haystack_columns) OR haystack_columns='{}') AND t.table_type='BASE TABLE' LOOP IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = tablename AND COLUMN_NAME = 'ID') THEN EXECUTE format('SELECT "ID" FROM ' || schemaname || '.' || tablename || ' WHERE cast("' || columnname || '" as text) LIKE '''|| needle ||''' ', schemaname, tablename, columnname, needle ) INTO rowctid; IF rowctid is not null THEN RETURN NEXT; END IF; END IF; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000; ALTER FUNCTION public.search_columns(text, name[], name[], name[]) OWNER TO postgres;
{pentru c utare cuvnt aproximativ, folosim %% n loc de %}