Db関数パラメーターの型としてのcharacter varying
とtext
の間に(パフォーマンスなどの)大きな違いはありますか? 2つの使用例があります。
例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;
例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;
注2番目の例では、some_column
のタイプがfilter_value
の場合、character varying
タイプはtext
であり、その逆も同様です。
パフォーマンスに関しては、Cでの実装に至るまで、これらのデータ型はまったく同じです。
疑わしい場合は、text
を使用します。これは、推奨されるタイプであるため、タイプクラス、および 関数のデータ型解決ルール は、すべての不明な文字列を暗黙的にtext
に解決します。 character varying
多くの場合、明示的な型キャストを使用する必要があります。