web-dev-qa-db-ja.com

PostgreSQLの選択クエリの最大列数はいくらですか

Postgresqlでクエリできる列の最大数を知っていますか?プロジェクトを開始する前にこれを知る必要があります。

35
Luke101

PostgreSQLについて によると、「250-1600は列のタイプに依存」です。 「制限」を参照してください。 PostgreSQLでは、行の幅が最大で8kb(1ページ)である場合があり、ページにまたがることができないため、列タイプがそれに影響します。 TOASTが列の大きな値を処理するので問題ありませんが、使用できる列の数には制限があり、TOASTされていないデータ型の幅によって異なります。

(厳密には、これはディスク上の行に格納できる列を指します。クエリはこれよりも広い列セットを使用できる場合があります。これに依存することはお勧めしません。)

列の制限に近づくことを考えている場合でも、おそらく問題が発生するでしょう。

スプレッドシートをリレーショナルデータベースにマッピングすることは、世界で最も単純なもののようです。つまり、列を列に、行を行に、そして行にマッピングします。正しい?実際には、スプレッドシートは構造を強制しない巨大なフリーフォームモンスターであり、非常に扱いにくい場合があります。リレーショナルデータベースは、lotsより多くの行を処理するように設計されていますが、コストがかかります。 PostgreSQLの場合、そのコストの一部は、それらの行の幅の制限です。 Joe Userが作成したスプレッドシートに直面すると、これは実際の問題になる可能性があります。

1つの「解決策」は、それらを [〜#〜] eav [〜#〜] に分解することですが、それは言葉では言い表せないほど遅く、扱いにくいです。より良いソリューションは、可能であれば配列、複合型、hstore、json、xmlなどを使用することです。

ただし、最終的には、スプレッドシートを使用してスプレッドシートを分析することが最良の答えになる場合があります。

40
Craig Ringer

この情報が有用であると考える他の人にとって、答えはこの投稿に含まれる列のタイプに応じて1663です http://archives.postgresql.org/pgsql-admin/2008-05/msg00208.php

8
Luke101

多数の列を持つ理由の1つは、テキストマイニングからの大きなWordベクトルを格納することです。

テキストマイニングは、10,000以上の機能(別名列)を生成できます。

MonetDB のようなデータウェアハウスを使用できます。これは、「テーブルあたりの列数は実質的に無制限」であると主張しています。

3
Neil McGuigan

JSON/JSONBタイプを使用すると、テーブルに非常に多くの列を持つ必要はほとんどありません。

また、ごくまれに、データベースシステムの最大列制限に達した場合、次のような表を持つスプレッドシートのRDBMS実装を使用できます。

create table wide_table(
id serial not null primary key
,rownum integer not null
,colnum integer not null
,colname varchar(30) not null
,coltype varchar(30) not null
,nullable boolean   not null
,collen  integer
,colprec integer
,colscale integer
,colvalue raw(2000)
,unique (rownum,colnum)
);

これにより、実質的に無制限の数の列が可能になりますが、それを使用するのは簡単ではありません。

1
Rob Heusdens