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
この場合、テーブル内のすべての列のデータ型を返しました。