Isso começou como uma pergunta sobre índices, mas quando recebi minha resposta , percebi que teria que tentar converter a resposta para a sintaxe 8.4 (não acredito que esse formato não exista).
Achei que estava lidando com as variáveis corretamente, mas por algum motivo não consigo fazer a digitação funcionar corretamente:
CREATE OR REPLACE FUNCTION add_column(schema_name TEXT, table_name
TEXT, column_name TEXT, data_type TEXT) RETURNS BOOLEAN AS $BODY$
DECLARE _tmp text;
BEGIN
EXECUTE 'SELECT COLUMN_NAME FROM information_schema.columns WHERE
table_schema='''+|| schema_name+'''
AND table_name='''+||table_name+'''
AND column_name='''+||column_name+'''' INTO _tmp;
IF _tmp IS NOT NULL THEN
RAISE NOTICE USING MESSAGE = 'Column '+||column_name+' already exists in '+||schema_name+'.'+||table_name;
RETURN FALSE; END IF;
EXECUTE format('ALTER TABLE %I.%I ADD COLUMN %I %s;', schema_name,
table_name, column_name, data_type);
RAISE NOTICE USING MESSAGE = 'Column '+||column_name+' added to '+||schema_name+'.'+||table_name;
RETURN TRUE;
END; $BODY$ LANGUAGE 'plpgsql';
Aqui está a mensagem de erro que recebo:
ERRO: operador não existe: texto + desconhecido
Alguém sabe como posso fazer isso funcionar no 8.4?