sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでのpg_typeof()のしくみ

    PostgreSQLでは、pg_typeof() 関数を使用すると、任意の値のデータ型を取得できます。

    具体的には、渡された値のデータ型のOIDを返します。 regtypeを返します 、これはOIDエイリアスタイプです。したがって、比較のためのOIDと同じですが、タイプ名として表示されます。

    構文

    この関数の構文は次のとおりです。

    pg_typeof(any)

    any 任意の値です。

    これがデモンストレーションの基本的な例です。

    SELECT pg_typeof(100);

    結果:

    integer

    任意の文字列

    Postgresには、複数の種類の文字列があります(例:charvarchartext )。したがって、引数を一重引用符で囲んで、そのデータ型が何であるかを知っていると期待することはできません。

    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

    この場合、テーブル内のすべての列のデータ型を返しました。


    1. Python FlaskとMySQLを使用してゼロからWebアプリを作成する:パート4

    2. SQL Serverで2つのテーブルに同時にデータを挿入するにはどうすればよいですか?

    3. Oracleトリガーに任意のパラメーターを送信するにはどうすればよいですか?

    4. Oracle-特定の行の実際のサイズを取得するにはどうすればよいですか?