为什么要在PostgreSQL中创建空(无行,无列)表

Tom*_*eif 13 postgresql

在回答这个问题时,我了解到你可以在PostgreSQL中创建空表.

create table t();
Run Code Online (Sandbox Code Playgroud)

这有什么实际用例吗?你为什么要创建空表?因为你不知道它会有哪些列?

Kub*_*aun 7

从我的角度来看,这些是一个列少的表是有益的.他们可能更倾向于温暖和模糊的类别.

1.在向其添加任何用户定义列之前创建表的一个实际用途是,它允许您在创建新系统时快速迭代,或者只是进行快速开发迭代.

2.更多的1,但允许你存储你的app逻辑或过程也可以引用的表,即使列还没有到位.

我可以看到它正在处理你在一家拥有大量开发人员的大公司的情况.也许您想在工作完成前提前几个月预留一个名字.只需将新的无列表添加到构建中.当然他们仍然可以高举它,但你可能能够在他们提出其他计划之前赢得你使用它的论点.有点边缘,但有效的好处.

所有这些都很方便,当我不在PostgreSQL工作时,我会想念它们.


IMS*_*SoP 5

我不知道它包含在 PostgreSQL 中的确切原因,但零列表 - 或者更确切地说是零属性关系 - 在关系代数理论中发挥作用,SQL(广泛)基于该理论。

具体来说,没有元组的零属性关系(在 SQL 术语中,没有列和行的表)是零或假的关系等价物,而没有属性但只有一个元组的关系(SQL:没有列,只有一个行,据我所知,这在 PostgreSQL 中是不可能的) 是 true 或 1。Hugh Darwen 是关系理论的直言不讳的倡导者和 SQL 的批评者,分别将这些称为“Table Dum”和“Table Dee”。

在正规代数x + 0 == x和 中x * 0 == 0,而x * 1 == x; 这个想法是在关系代数中,Table Dum 和 Table Dee 可以用作连接、联合等的类似原语。

PostgreSQL 在内部将表(以及视图和序列)称为“关系”,因此尽管它是围绕着实现 SQL 而不是由这种纯关系代数定义的,但在其设计或历史。


Nur*_*mir 5

我不认为我的预期用途,但是最近我使用一个空表作为我使用 EXECUTE 动态创建和更改的视图的锁。创建/替换视图的函数对空表具有 ACCESS EXCLUSIVE,并且使用该视图的其他函数具有 ACCESS。