この質問への回答として、PostgreSQL で空のテーブルを作成できることを知りました。
create table t();
これには実際の使用例はありますか? なぜ空のテーブルを作成するのですか? どの列があるかわからないからですか?
この質問への回答として、PostgreSQL で空のテーブルを作成できることを知りました。
create table t();
これには実際の使用例はありますか? なぜ空のテーブルを作成するのですか? どの列があるかわからないからですか?
PostgreSQL に含まれる正確な理由はわかりませんが、SQL が (広く) 基づいているリレーショナル代数の理論では、ゼロ列テーブル (またはゼロ属性関係) が役割を果たしています。
具体的には、タプルのないゼロ属性のリレーション (SQL 用語では、列も行もないテーブル) は、ゼロまたは false に相当するリレーショナルですが、属性がなくタプルが 1 つのリレーション (SQL: 列がなく、行が 1 つないテーブル) です。私の知る限り PostgreSQL では不可能な行) は true または 1 です。率直なリレーショナル理論の支持者であり、SQL の批評家であるヒュー ダーウェンは、これらをそれぞれ「テーブル ダム」と「テーブル ディー」と呼んだ。
通常の代数ではx + 0 == x
とx * 0 == 0
、一方x * 1 == x
; 関係代数では、Table Dum と Table Dee を結合、共用体などの同様のプリミティブとして使用できるという考え方です。
PostgreSQL は内部的にテーブル (およびビューとシーケンス) を「リレーション」と呼んでいるため、この種の純粋なリレーション代数によって定義されていない SQL の実装を対象としていますが、その設計または歴史。
空のテーブルではありません - 空の結果のみです。PostgreSQL の行には、(デフォルトでは) 非表示の列がいくつか含まれています。確かではありませんが、Postgres が Objected Relational database であり、PG がサポートする言語 POSTQUEL であった暗黒時代のアーティファクトである可能性があります。この空のテーブルは、クラス階層の抽象的な祖先として機能できます。
私は意図した使用法ではないと思いますが、最近、空のテーブルをビューのロックとして使用し、EXECUTE で動的に作成および変更しました。ビューを作成/置換する関数には空のテーブルに対する ACCESS EXCLUSIVE があり、ビューを使用する他の関数には ACCESS があります。