Postgresql

如何從文件系統級備份將現有模式和表空間導入 postgres 數據庫

  • June 11, 2018

來自的後續問題:讓 postgres 的 pg_dump 導出索引

假設我有一個現有的數據庫,我想向其中添加另一個包含內容的模式。我之前通過為模式的表和索引提供服務的表空間的文件系統級備份保存了該內容。

我知道 DATABASE、TABLE 和 INDEX 需要儲存一個表空間,但不是 SCHEMA(它們的聲明儲存在 DATABASE 的表空間中?)。

那麼,如何讓 DATABASEs 表空間了解它需要訪問特定模式,該模式將通過預先存在的表空間定義其表和索引。

或者,我可以創建一個 CREATE TABLE t TABLESPACE tspace 語句來連接到 tspace TABLESPACE(而不是開始向其中寫入一個空的表實例)?

(換句話說,一個 DDL 語句的執行是否儲存在 DATABASEs 表空間中,而沒有任何東西觸及另一個表空間?)

假設我有一個現有的數據庫,我想向其中添加另一個包含內容的模式。我之前通過為模式的表和索引提供服務的表空間的文件系統級備份保存了該內容

不幸的是,表空間的隔離備份不能用於任何目的。

我認為您正在嘗試做的是基於表空間可以或多或少移動的前提,可能會在不同的時間點插入不同的數據庫或相同的數據庫,諸如此類。但這一切都不可能。表空間在行和其他地方保存實時元數據,一旦您將其與實例的其餘部分隔離,這些元數據就會出錯。

DDL 語句的結果進入pg_catalog每個數據庫的模式。pg_catalog還包含對跨所有數據庫共享且未儲存在任何特定數據庫中的對象的引用,例如pg_authidor pg_database

查看Have postgres’ pg_dump export an index我可以看到您的想法來自哪裡。但是我看不出@mustaccio 的答案有什麼實際用途。如果您有一個表及其索引的 FS 級映像,它們具有匹配的 TID,然後呢?在集群的其餘部分之外,這些文件沒有實際用途。

引用自:https://dba.stackexchange.com/questions/209023