Очистить postgres знание отброшенных столбцов - PullRequest
5 голосов
/ 07 июля 2011

У меня есть таблица в базе данных postgres, которая используется в тестовой среде, где нам нужно добавлять и удалять несколько столбцов одновременно. Проблема в том, что postgres имеет максимум 1600 столбцов, и это число включает пропущенные столбцы. Моя таблица никогда не будет иметь 1600 столбцов «без отбрасывания», но со временем она будет накапливаться до 1600 с дропами.

Я пытался использовать VACUUM и VACUUM FULL, и я пытался преобразовать существующий столбец как его собственный тип (ALTER TABLE table ALTER COLUMN anycol TYPE anytype), чтобы Postgres просканировал все столбцы и очистил память от удаленных столбцы, но ни один из них не сбрасывает postgres '`номер столбца.'

Я знаю, что это можно решить путем копирования всей таблицы, но у нее есть свои проблемы, и это отдельный вопрос.

Вы знаете, как заставить postgres забыть, что он отбросил столбцы?

Я знаю, что postgres не был разработан для подобных приложений, но я не буду вдаваться в подробности, почему мы решили реализовать его таким образом. Если у вас есть альтернативный инструмент, мне было бы интересно узнать об этом, но я все же хотел бы найти решение этой проблемы.

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

Это невозможно, кроме как путем воссоздания таблицы, как вы уже узнали.

В противном случае система баз данных должна была бы каким-то образом отслеживать, когда хранилище, используемое удаленным столбцом, было очищено повсеместно, а затем перенумеровать атрибуты. Это было бы невероятно дорого и сложно.

0 голосов
/ 07 июля 2011

Системная таблица pg_attribute по-прежнему показывает старые (удаленные) столбцы. Я не знаю почему, но мне это кажется ошибкой.

SELECT 
  relnatts, 
  attname, 
  attisdropped 
FROM 
  pg_class 
    JOIN pg_attribute att ON attrelid = pg_class.oid 
WHERE 
  relname = 'your_table_name';

Не могли бы вы отправить отчет об ошибке, включая простой пример, по адресу pgsql-bugs@postgresql.org или http://www.postgresql.org/support/submitbug?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...