Знаете ли вы, какое максимальное количество столбцов можно запросить в Postgresql? Мне нужно знать это, прежде чем я начну свой проект.
Каково максимальное количество столбцов в запросе на выборку PostgreSQL?
Ответы (3)
В соответствии с Ограничениями PostgreSQL это "250–1600 в зависимости от типов столбцов". См. примечание под таблицей. Типы столбцов влияют на это, потому что в PostgreSQL строки могут иметь ширину не более 8 КБ (одна страница), они не могут занимать страницы. Большие значения в столбцах — это нормально, потому что TOAST обрабатывает это, но существует ограничение на количество столбцов, которые вы можете поместить, это зависит от того, насколько широки используемые типы данных без TOAST.
(Строго это относится к столбцам, которые могут храниться в строках на диске; запросы могут использовать более широкие наборы столбцов, чем это. Я не рекомендую полагаться на это.)
Если вы даже думаете о приближении к ограничениям столбцов, у вас, вероятно, возникнут проблемы.
Сопоставление электронных таблиц с реляционными базами данных кажется самой простой вещью в мире — сопоставьте столбцы со столбцами, строки со строками и вперед. Верно? На самом деле электронные таблицы — это огромные монстры произвольной формы, которые не навязывают никакой структуры и могут быть очень громоздкими. Реляционные базы данных предназначены для обработки намного большего количества строк, но за это приходится платить; в случае PostgreSQL часть этой стоимости является ограничением ширины строк. При работе с электронными таблицами, созданными Джо Юзером, это может стать настоящей проблемой.
Одно «решение» состоит в том, чтобы разложить их на EAV, но работать с этим невыразимо медленно и некрасиво. Лучшими решениями являются использование массивов, где это возможно, составных типов, hstore
, json, xml и т. д.
В конце концов, иногда лучшим ответом является анализ электронной таблицы с помощью электронной таблицы.
Для тех, кто может найти эту информацию полезной, ответ 1663 в зависимости от типов столбцов, соответствующих этому сообщению http://archives.postgresql.org/pgsql-admin/2008-05/msg00208.php
При использовании типа JSON/JSONB почти нет необходимости иметь очень много столбцов в таблице.
И в редких случаях, если бы вы достигли максимального предела столбцов вашей системы базы данных, возможно, вы могли бы использовать реализацию электронной таблицы в РСУБД с таблицей, подобной следующей:
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)
);
Это позволило бы использовать практически неограниченное количество столбцов, но его использование было бы менее тривиальным.