PostgreSQLの列タイプを知る必要があります(つまりvarchar(20)
)。\d
おそらくpsqlで何かを使用してこれを見つけることができることは知っていますが、selectクエリで実行する必要があります。
これはPostgreSQLで可能ですか?
質問する
13398 次
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 に答える