Согласно стандарту, таблица должна иметь один или более столбцов. Соответственно, нельзя удалить единственный столбец в таблице. Подобное действие должно вызывать ошибку, т.к. это эквивалентно удалению таблицы, для чего имеется оператор DROP TABLE.
В версии 8.3 я могу получить таблицу без столбцов:
CREATE TABLE fooo();
и удалить единственный столбец:
CREATE TABLE foo(f int PRIMARY KEY); ALTER TABLE foo DROP COLUMN f;
Собственно, вопрос. Если разработчики идут на нарушение стандарта, значит для этого должны быть веские основания. Для чего может понадобиться таблица без столбцов?
Так думается, что может быть
Так думается, что может быть связано с использованеим наследования наблиц и оо подхода.
ООП
Т.е. это может быть связано с объектно-реляционной природой PG.
Но что можно наследовать у такой таблицы?
Но ведь объекту тоже не
Но ведь объекту тоже не обязательно обладать свойствами и методами, так что ...
Это понятно, но какую выгоду
Это понятно, но какую выгоду можно из сего факта извлечь?
Другими словами, что такое можно сделать, чего нельзя или неудобно было бы сделать "классическими" методами?
Или с какой проблемой мы столкнемся, если этого не будет?
К примеру, удобно при
К примеру, удобно при создании временных таблиц во время выполенения. Сначала создаем таблицу, а потом нужны поля. Хотя не думаю, что можно столкнуться с какими-то существенными проблемами.
Не понимаю. Чем
Не понимаю. Чем удобней
create table foo();
...
alter table foo
add column f int;
вместо
create table foo(f int);
если в промежутке между create и alter таблица никак не будет использоваться.
Я лишь могу предполагать
Я лишь могу предполагать конечно, но...
у CREATE TABLE довольно много опций (опции хранения, например). Возможно удобней один раз сделать пресет из этих опций при создании таблицы, а затем не удалять таблицу, а удалять только колонки. Чтобы потом не создавать таблицу заново с указанием всех этих опций.
Чтобы не выделять/освобождать
Чтобы не выделять/освобождать дисковое пространство многократно, можно создать таблицу с одним столбцом, например, а потом добавлять и удалять то, что нужно.
Вряд ли такое сомнительное преимущество стоит нарушения стандарта и, соответственно, добавления проблем переносимости кода.
В принципе в таблицах и так
В принципе в таблицах и так есть один скрытый столбец OID, хотя конечно, возможно создать таблицу и без него.
Ну что могу сказать - наверное, какой-то резон всё-таки есть, поскольку разработчики таки сделали так.
Можно попробовать спросить их об этом и указать на нарушение стандарта. Возможно, что это будет исправлено.
Спрошу при случае. Но сначала
Спрошу при случае.
Но сначала неплохо было бы проверить это на последних версиях.
Я знаю, что, помимо 8.4, есть альфы 8.5 и даже 9.0.
Может стоит у кого?