PostgreSQLでは、pg_typeof() 関数を使用すると、任意の値のデータ型を取得できます。
具体的には、渡された値のデータ型のOIDを返します。 regtypeを返します 、これはOIDエイリアスタイプです。したがって、比較のためのOIDと同じですが、タイプ名として表示されます。
構文
この関数の構文は次のとおりです。
pg_typeof(any)
any 任意の値です。
例
これがデモンストレーションの基本的な例です。
SELECT pg_typeof(100); 結果:
integer
任意の文字列
Postgresには、複数の種類の文字列があります(例:char 、varchar 、text )。したがって、引数を一重引用符で囲んで、そのデータ型が何であるかを知っていると期待することはできません。
SELECT pg_typeof('Elephant'); 結果:
unknown
したがって、実際のデータ型を指定する必要があります。
SELECT pg_typeof('Elephant'::varchar); 結果:
character varying
Postgresでは、character varying varcharの名前です (実際には、varchar character varyingのエイリアスです 。
この最後の例は、変数の型を明示的に記述したため、少し不必要でした。つまり、結果がどうなるかはすでにわかっていました。
現実の世界では、変数のデータ型を取得しようとしている可能性が高くなります。
変数の型を返す
この例では、前の文字列を変数に入れてから、そのデータ型を取得します。
DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$ 結果:
NOTICE: Value: Elephant Type: character varying
データ型を別の文字列型(char(8))に変更したことを除いて、ここでも同じです。 。
DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$ 結果:
NOTICE: Value: Elephant Type: character
ブール値
ブール値を明示的に提供する例を次に示します。
SELECT
pg_typeof(true),
pg_typeof(false); 結果:
pg_typeof | pg_typeof -----------+----------- boolean | boolean
関数の戻り値
繰り返しになりますが、trueを明示的に提供する可能性はほとんどありません。 またはfalse この関数に。変数から発生する可能性が高くなります。
ただし、pg_typeof()を使用することもできます 関数の戻り型を見つけるため。
これが例です。
SELECT pg_typeof(isfinite(date '2020-07-18')); 結果:
boolean
この場合、isfinite()を渡しました pg_typeof()への関数 その引数として機能します。
そして、ここに別の例があります。これでは、make_date()の戻り値のデータ型を取得します 機能。
SELECT pg_typeof(make_date('1999', '09', '19')); 結果:
date
列のデータ型
データベース列のデータ型を返す例を次に示します。
SELECT pg_typeof(last_update)
FROM actor
LIMIT 1; 結果:
timestamp without time zone
この場合、actor.last_updateのデータ型を確認しました pagilaの列 サンプルデータベース。
別の列を確認しましょう:
SELECT pg_typeof(name)
FROM language
LIMIT 1; 結果:
character
この列はbpcharとして表示されます 私のインターフェースでは、これは明らかにCHAR(n)の内部型名です。 。
ちなみに、information_schema.columnsをクエリできます 列のデータ型。
したがって、代わりに次のクエリを使用できます。
SELECT
column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'language'; 結果:
column_name | data_type -------------+----------------------------- language_id | integer name | character last_update | timestamp without time zone
この場合、テーブル内のすべての列のデータ型を返しました。