web-dev-qa-db-fra.com

Quel est le nombre maximal de colonnes dans une requête de sélection PostgreSQL

Savez-vous quel est le nombre maximum de colonnes pouvant être interrogées dans Postgresql? J'ai besoin de le savoir avant de commencer mon projet.

35
Luke101

Selon à propos de PostgreSQL c'est "250 - 1600 selon les types de colonnes". Voir "Limites". Les types de colonnes l'affectent car dans les lignes PostgreSQL, elles peuvent avoir au plus 8 Ko (une page) de large, elles ne peuvent pas s'étendre sur les pages. Les grandes valeurs dans les colonnes sont correctes car TOAST gère cela, mais il y a une limite au nombre de colonnes que vous pouvez tenir en fonction de la largeur des types de données non TOASTed utilisés.

(Strictement, cela fait référence aux colonnes qui peuvent être stockées dans des lignes sur le disque; les requêtes peuvent être en mesure d'utiliser des ensembles de colonnes plus larges que celui-ci. Je ne recommande pas de compter dessus.)

Si vous songez même à approcher les limites des colonnes, vous aurez probablement des problèmes.

Mapper des feuilles de calcul sur des bases de données relationnelles semble être la chose la plus simple au monde - mapper des colonnes sur des colonnes, des lignes sur des lignes, et c'est parti. Droite? En réalité, les feuilles de calcul sont d'énormes monstres de forme libre qui n'imposent aucune structure et peuvent être vraiment désordonnés. Les bases de données relationnelles sont conçues pour gérer beaucoup plus de lignes, mais à un coût; dans le cas de PostgreSQL, une partie de ce coût est une limitation de la largeur qu'il souhaite que ces lignes soient. Lorsque vous faites face à des feuilles de calcul créées par Joe User, cela peut être un vrai problème.

Une "solution" consiste à les décomposer en EAV , mais c'est incroyablement lent et laid à travailler. Les meilleures solutions utilisent des tableaux dans la mesure du possible, des types composites, hstore, json, xml, etc.

En fin de compte, cependant, la meilleure réponse est parfois d'analyser la feuille de calcul à l'aide d'une feuille de calcul.

40
Craig Ringer

Pour d'autres qui pourraient trouver ces informations utiles, la réponse est 1663 selon les types de colonnes correspondant à ce message http://archives.postgresql.org/pgsql-admin/2008-05/msg00208.php

8
Luke101

L'une des raisons d'avoir beaucoup de colonnes est de stocker un grand vecteur Word, provenant de l'exploration de texte.

L'exploration de texte peut produire 10 000 fonctionnalités ou plus, également appelées colonnes.

Vous pouvez utiliser un entrepôt de données comme MonetDB , qui prétend que "le nombre de colonnes par tables est pratiquement illimité".

3
Neil McGuigan

Avec l'utilisation du type JSON/JSONB, il n'est presque pas nécessaire d'avoir de très nombreuses colonnes dans une table.

Et dans de rares cas, si vous atteigniez la limite maximale de colonnes de votre système de base de données, vous pourriez peut-être utiliser une implémentation RDBMS d'une feuille de calcul, avec un tableau comme celui-ci:

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)
);

Cela permettrait un nombre pratiquement illimité de colonnes, mais son utilisation serait moins triviale.

1
Rob Heusdens