Existe alguma diferença significativa (no desempenho, por exemplo) entre os tipos character varying
vs. text
as para os parâmetros da função db? Tenho 2 exemplos de uso:
Exemplo 1:
CREATE OR REPLACE FUNCTION func1(table_name <character varying|text>)
RETURNS integer AS $$
DECLARE
RESULT integer;
BEGIN
EXECUTE 'SELECT COUNT(*) FROM ' || table_name INTO result;
RETURN result;
END;
$$ LANGUAGE plpgsql;
Exemplo 2:
CREATE OR REPLACE FUNCTION func2(filter_value <character varying|text>)
RETURNS integer AS $$
DECLARE
RESULT integer;
BEGIN
SELECT COUNT(*) INTO RESULT FROM <some_table> WHERE <some_column> = filter_value;
RETURN result;
END;
$$ LANGUAGE plpgsql;
NOTA no 2º exemplo o some_column
tipo é text
se filter_value
for do tipo character varying
e vice-versa
Quando se trata de desempenho, esses tipos de dados são exatamente os mesmos, até a implementação em C.
Em caso de dúvida, use
text
, porque esse é o tipo preferido de sua classe de tipo e as regras de resolução de tipo de dados para funções resolverão todas as strings desconhecidastext
implicitamente. Comcharacter varying
você muitas vezes tem que usar casts de tipo explícito.