7

PostgreSQLの列タイプを知る必要があります(つまりvarchar(20))。\dおそらくpsqlで何かを使用してこれを見つけることができることは知っていますが、selectクエリで実行する必要があります。
これはPostgreSQLで可能ですか?

4

3 に答える 3

11

PostgreSQLには、列の型を取得するためのはるかに簡単な方法があります。

SELECT pg_typeof(col)::text FROM tbl LIMIT 1

もちろん、テーブルには少なくとも1つの行を保持する必要があります。また、型修飾子(存在する場合)を含まない基本型のみを取得します。それが必要な場合も、以下の代替手段を使用してください。
この関数は定数にも使用できます。のマニュアルpg_typeof()

空の(または任意の)テーブルの場合、システムカタログpg_attributeをクエリして、列の完全なリストとそれぞれのタイプを順番に取得できます。

SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytbl'::regclass   -- optionally schema-qualified
AND    NOT attisdropped
AND    attnum > 0
ORDER  BY attnum;

のようなformat_type()オブジェクト識別子タイプのマニュアルregclass

于 2011-10-26T09:06:32.170 に答える
9

次のクエリでpostgresを使用してテーブルを完全に記述することができます。

SELECT
  a.attname as Column,
  pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype
  FROM
  pg_catalog.pg_attribute a
  WHERE
    a.attnum > 0
  AND NOT a.attisdropped
  AND a.attrelid = (
    SELECT c.oid
    FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
    WHERE c.relname ~ '^(TABLENAME)$'
   AND pg_catalog.pg_table_is_visible(c.oid)
  )

これにより、列名とデータ型を取得します。

-Eオプションを使用してpsqlクライアントを起動することも可能です

$ psql -E

そして、simple\d mytableはpostgresがテーブルを記述するために使用するクエリを出力します。これは、すべてのpsqldescribeコマンドで機能します。

于 2010-12-02T14:56:52.917 に答える
2

はい、information_schemaを見てください

于 2010-12-02T14:56:08.827 に答える