您知道Postgresql中可以查询的最大列数吗?在开始我的项目之前,我需要知道这一点。
答案 0 :(得分:37)
根据About PostgreSQL,它是“250 - 1600,具体取决于列类型”。请参阅“限制”。列类型会影响它,因为在PostgreSQL中,行最多可以是8kb(一页)宽,它们不能跨页面。列中的大值是可以的,因为TOAST会处理这些值,但是您可以容纳多少列的数量取决于所使用的未转换数据类型的宽度。
(严格来说,这指的是可以存储在磁盘上的行;查询可能会使用比这更宽的列集。我不建议依赖它。)
如果您甚至考虑接近列限制,那么您可能会遇到问题。
将电子表格映射到关系数据库似乎是世界上最简单的事情 - 将列映射到列,将行映射到行和go。对?实际上,电子表格是巨大的自由形态怪物,它们不执行任何结构,并且可能非常不适合。关系数据库旨在处理批次更多行,但需要付出代价;在PostgreSQL的情况下,该成本的一部分是对它们喜欢这些行的宽度的限制。当面对Joe User创建的电子表格时,这可能是一个真正的问题。
一个“解决方案”是将它们分解为EAV,但这是难以置信的缓慢和丑陋的工作。更好的解决方案是尽可能使用数组,复合类型,hstore
,json,xml等。
最后,有时最好的答案是使用电子表格分析电子表格。
答案 1 :(得分:8)
对于可能发现此信息有用的其他人,答案是1663,具体取决于本帖子所列的列类型 http://archives.postgresql.org/pgsql-admin/2008-05/msg00208.php
答案 2 :(得分:3)
答案 3 :(得分:1)
使用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)
);
这将允许几乎无限数量的列,但使用它将不那么简单。