web-dev-qa-db-ja.com

PostgreSQLの関数パラメーター型としての文字可変対テキスト

Db関数パラメーターの型としてのcharacter varyingtextの間に(パフォーマンスなどの)大きな違いはありますか? 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であり、その逆も同様です。

1

パフォーマンスに関しては、Cでの実装に至るまで、これらのデータ型はまったく同じです。

疑わしい場合は、textを使用します。これは、推奨されるタイプであるため、タイプクラス、および 関数のデータ型解決ルール は、すべての不明な文字列を暗黙的にtextに解決します。 character varying多くの場合、明示的な型キャストを使用する必要があります。

1
Laurenz Albe