Зачем создавать пустые таблицы (без строк, без столбцов) в PostgreSQL

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

create table t();

Есть ли какой-либо реальный прецедент для этого? Зачем вам создавать пустую таблицу? Потому что вы не знаете, какие столбцы у него будут?

Ответ 1

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

1. Одно практическое использование создания таблицы перед добавлением любого пользователя       определенные столбцы - это то, что он позволяет быстро итеративно       создание новой системы или просто выполнение быстрых итераций в целом.

2. Вид более 1, но позволяет вам заглушить таблицы, в которых ваша логика или процедура приложения также могут ссылаться, даже если столбцы имеют   но до       быть введенным в действие.

3. Я мог видеть, как это происходит в случае, когда вы работаете в большой компании с большим количеством разработчиков. Возможно, вы хотите зарезервировать имя       за несколько месяцев до того, как ваша работа будет завершена. Просто добавьте новый       столбец без таблицы в сборку. Конечно, они все еще могут быть высокими       jack, но вы можете выиграть аргумент, который у вас был в       хорошо использовать, прежде чем они придут вместе со своими другими планами. Вид       но действительное преимущество.

Все это удобно, и я пропускаю их, когда я не работаю в PostgreSQL.

Ответ 2

Это не пустая таблица - только пустой результат. Строки PostgreSQL содержат некоторые невидимые (по умолчанию) столбцы. Я не уверен, но это может быть артефакт из темного возраста, когда Postgres была объектной реляционной базой данных - и PG поддерживал язык POSTQUEL. Эта пустая таблица может работать как абстрактный предок в иерархии классов.

Список столбцов системы

Ответ 3

Я не знаю точной причины его включения в PostgreSQL, но в теории реляционной алгебры играет роль таблица с нулевым столбцом, а точнее отношение с нулевым атрибутом, на которой основан (в широком смысле) SQL,

В частности, отношение нулевого атрибута без кортежей (в терминах SQL, таблица без столбцов и без строк) является реляционным эквивалентом нуля или false, тогда как отношение без атрибутов, кроме одного кортежа (SQL: no columns, но одна строка, которая невозможна в PostgreSQL, насколько я знаю) является истинным или одним. Хью Дарвен, откровенный сторонник теории отношений и критик SQL, назвал эти "Table Dum" и "Table Dee" соответственно.

В нормальной алгебре x + 0 == x и x * 0 == 0, тогда как x * 1 == x; идея заключается в том, что в реляционной алгебре Table Dum и Table Dee могут использоваться как схожие примитивы для объединений, союзов и т.д.

PostgreSQL внутренне ссылается на таблицы (а также на представления и последовательности) как на "отношения", поэтому, хотя он ориентирован на реализацию SQL, который не определен такой чистой алгеброй отношения, могут быть элементы из его дизайна или истории.

Ответ 4

Я не думаю, что мое предназначено для использования, но в последнее время я использовал пустую таблицу в качестве блокировки для представления, которое я создаю и динамически изменяю с помощью EXECUTE. Функция, создающая/заменяющая представление, имеет ACCESS EXCLUSIVE в пустой таблице, а другие функции, которые используют представление, имеют ACCESS.