Quel est le nombre maximum de colonnes dans une requête select PostgreSQL

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

31
demandé sur Luke101 2012-09-26 21:03:38

4 réponses

Selon à propos de PostgreSQL c'est"250 - 1600 selon les types de colonnes". Voir "Limites". Les types de colonnes l'affectent car dans PostgreSQL, les lignes peuvent avoir une largeur maximale de 8 Ko (une page), elles ne peuvent pas couvrir 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 intégrer, cela dépend de la largeur des types de données non grillés 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 utilisez des ensembles de colonnes plus larges que cela. Je ne recommande pas de compter dessus.)

Si vous envisagez même d'approcher les limites des colonnes, vous allez probablement avoir des problèmes.

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

Une "solution" est de les décomposer en EAV, mais c'est indiciblement lent et laid à travailler. De meilleures solutions utilisent des tableaux si possible, des types composites, hstore, json, xml,etc.

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

33
répondu Craig Ringer 2014-08-22 15:06:15

Pour les autres qui pourraient trouver cette information utile, la réponse est 1663 en fonction des types de colonnes occording à ce post http://archives.postgresql.org/pgsql-admin/2008-05/msg00208.php

8
répondu Luke101 2012-09-26 17:54:28

Une raison d'avoir beaucoup de colonnes est de stocker un grand vecteur de mots, à partir de l'exploration de texte.

L'exploration de texte peut produire 10 000 fonctionnalités ou plus, aka 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
répondu Neil McGuigan 2015-07-20 11:56:20

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

Et dans de rares cas, si vous atteignez la limite maximale de colonne de votre système de base de données, vous pourriez peut-être utiliser une implémentation SGBDR d'une feuille de calcul, avec une table comme celle-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 l'utiliser serait moins trivial.

1
répondu Rob Heusdens 2017-02-01 22:27:53