2

Postgres by Javaで配列列の基本型/次元を取得するには?

int[][]やのような配列を含むテーブルがありますtext[]

JDBC からメタデータをトラバースすると、タイプ as しか取得できませんjava.sql.Array。その中でもinformation_schema.columns単純にARRAYとして保存されています。

ベースタイプとその寸法を知るにはどうすればよいですか?

現在、テーブル情報をダンプするツールに取り組んでいます。

4

3 に答える 3

4

配列基本型の場合、含まれている列のメタデータをDatabaseMetaData.getColumns()返します。ResultSet返される列の 1 つが ですTYPE_NAME。これには、アンダースコアで始まる配列の基本型の名前が含まれているようです。たとえば、_int4または_text. pg_typeには、タイプに関する役立つ情報がいくつかあります。

ディメンションについては、メタデータに含まれる可能性は低いようです。ドキュメントから:

ただし、現在の実装では、指定された配列サイズの制限は無視されます。つまり、動作は、長さが指定されていない配列の場合と同じです。

現在の実装では、宣言された次元数も強制されません。特定の要素型の配列は、サイズや次元数に関係なく、すべて同じ型であると見なされます。したがって、CREATE TABLE で配列のサイズまたは次元数を宣言することは、単なるドキュメントです。実行時の動作には影響しません。

このarray_dims関数は、配列値の現在の次元を返します。しかし、これはテーブルの行ごとに異なる可能性があるため、これが役立つとは思えません。

更新: ディメンションはメタデータで利用できるようです。@a_horse_with_no_name の回答を参照してください。

于 2013-05-18T11:09:11.477 に答える
2

@Joe がすでにクリアしたものに加えてpg_typof()、PostgreSQL から型情報を取得するために使用できます。

この例では、整数の 2 次元配列が与えられます。

SELECT pg_typeof(a)::text AS type
      ,(SELECT typname FROM pg_type WHERE oid = pg_typeof(a)) AS base_type
      ,array_dims(a) AS dims
FROM   (SELECT '{{11,12,13},{21,22,23}}'::int[]) x(a);

   type    | base_type |    dims
-----------+-----------+------------
 integer[] | _int4     | [1:2][1:3]

配列の次元 ( dims) は値ごとに異なる場合があることに注意してください。Postgres は現在、ディメンションを適用しません (v9.3 まで)。
マニュアルに記載されているように、pg_attribute.attndimsここでは使用が制限されています。

列が配列型の場合は次元数。それ以外の場合は 0。

于 2013-05-18T13:43:24.990 に答える