PostgreSQL的select查询中最大列数是多少?

58

您知道在PostgreSQL中可以查询的最大列数吗?在开始我的项目之前,我需要了解这个问题。


可能重复:http://stackoverflow.com/questions/12155777/max-number-of-tables-in-postgresql-select-query - mawburn
我很少需要在表格中放置大量列。没有其他方法可以避免严重的痛苦。 - Luke101
10
虽然对于数据库设计问题持高度怀疑态度,但这仍然是一个有效的问题。相关建议不能取代答案。 - Erwin Brandstetter
1
你需要每个都是唯一列吗?序列化数据或数组可以帮助解决这个问题吗? - Scott Marlowe
1
补充@Scott的评论:也许可以考虑hstore - Erwin Brandstetter
实际上,是的 - 我需要单独的列。我将导入成千上万个CSV文件到表中进行分析。一些CSV文件有很多列。此外,一些整数和日期列需要索引。 - Luke101
3个回答

69
根据PostgreSQL Limits,它是“250-1600,取决于列类型”。请参见表下的注释。列类型会影响它,因为在PostgreSQL中,行的最大宽度为8kb(一个页面),它们不能跨页。列中的大值没问题,因为TOAST可以处理它,但有一个限制,这取决于使用的未经TOAST处理的数据类型有多宽。

(严格来说,这是指可以存储在磁盘行中的列;查询可能能够使用比此更宽的列集。我不建议依赖它。)

如果您即将接近列限制,您可能会遇到问题。

将电子表格映射到关系数据库似乎是世界上最简单的事情-将列映射到列,将行映射到行,然后进行操作。对吗?实际上,电子表格是巨大的自由格式文件,不强制执行任何结构,可能非常难以处理。关系数据库被设计用于处理大量的行,但代价是,对于PostgreSQL,其中一部分代价是它喜欢那些行的宽度有限制。面对由Joe User创建的电子表格时,这可能是一个真正的问题。

一种“解决方案”是将它们分解成EAV,但这非常慢且难以处理。更好的解决方案是在可能的情况下使用数组,复合类型,hstore,json,xml等。

但最终,有时最好的答案是使用电子表格分析电子表格。


3
哇,我非常熟悉 SQL Server,但这是我第一次使用 PostgreSQL。我不知道数据库还有 hstore 和 json 这样的数据类型。你给了我一个很好的想法,可以通过使用这些数据类型来解决另一个问题。我看到 PostgreSQL 是一个强大的工具。 - Luke101
1
顺便提一下,Postgres 9.4将带来JSON支持的重大新功能。现在已经作为beta版本发布。XML支持已经非常出色。而且,在“No-SQL”标签被创造之前,Postgres就已经拥有键值对支持(hstore)。确实强大。 - Basil Bourque

11

0
通过使用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)
);

这将允许实际上无限数量的列,但使用它会更加不容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接