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

时间:2013-08-02 19:17:26

标签: postgresql

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

create table t();

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

4 个答案:

答案 0 :(得分:7)

从我的观点来看,这些是一个较少的列表是有益的。他们可能更多地陷入温暖和模糊的范畴。

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

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

3。   我可以看到它涉及你在一家拥有大量开发人员的大公司的情况。也许你想保留一个名字         在工作完成之前提前几个月。只需添加新的         构建的无列表。当然他们仍然可能很高         杰克,但你可能能够赢得你所拥有的论点         在他们提出其他计划之前使用得很好。的种类         边缘,但是有效的好处。

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

答案 1 :(得分:4)

它不是空表 - 只有空结果。 PostgreSQL行包含一些不可见(默认情况下)列。我不确定,但它可能是黑暗时代的神器,当Postgres被反对关系数据库 - 和PG支持语言POSTQUEL。这个空表可以作为类层次结构中的抽象祖先。

List of system columns

答案 2 :(得分:4)

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

具体来说,没有元组的零属性关系(在SQL术语中,没有列和没有行的表)是零或等的关系等价,而没有属性但只有一个元组的关系(SQL:没有列)但是,据我所知,在PostgreSQL中不可能的一行是真的还是一行。休·达文(Hugh Darwen)是一位直言不讳的关系理论倡导者和SQL评论家,他们分别将这些称为“桌上笨蛋”和“表迪”。

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

PostgreSQL在内部将表(以及视图和序列)称为“关系”,因此虽然它是针对实现SQL而不是由这种纯关系代数定义的,但可能存在这样的元素。它的设计或历史。

答案 3 :(得分:2)

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