PostgreSQL / 簡短指南

如何在 PostgreSQL 中匯出資料庫和表格結構描述

分享到

簡介

在關聯式資料庫中,資料庫結構描述定義了資料庫的結構及其組成部分,例如表格、欄位和索引。提取和匯出此資訊在許多情境中都很有用,包括備份、遷移到新環境、視覺化資料結構以及在程式碼庫中管理這些結構。

在本簡短指南中,我們將討論如何使用 pg_dump 命令匯出 PostgreSQL 資料庫結構描述。雖然此公用程式可以從 PostgreSQL 匯出多種類型的資料,但在本指南中,我們將重點放在提取資料結構本身。

基本用法

從 PostgreSQL 匯出資料庫結構描述所需的基本命令如下

pg_dump --schema-only DATABASE > schema.sql

根據您的 PostgreSQL 設定,您可能還需要包含以下一些選項

  • --username= / -U:您要用於驗證的資料庫使用者名稱
  • --password / -W:強制 pg_dump 提示輸入密碼以進行驗證
  • --host= / -h:PostgreSQL 所在的主機名稱或 IP 位址
  • --port= / -p:PostgreSQL 正在監聽的連接埠號碼

負責告知 pg_dump 僅包含資料庫結構,而不包含資料本身的選項是 --schema-only

  • --schema-only-s:僅匯出物件定義,而不匯出資料本身。

此外,第一個非選項引數(在此處以「DATABASE」一詞表示)指示要匯出的確切資料庫。

使用此資訊,您可以使用類似以下的命令,使用名為 sales_reporter 的受限使用者匯出名為 SALES 的資料庫結構描述

pg_dump --username=sales_reporter --password --schema-only SALES > sales_database_schema.sql

修改匯出行為

上面討論的基本用法將輸出與所討論資料庫相關的每個結構。我們可以透過許多其他選項來修改此行為,在某些情況下,可以使用相關的 pg_dumpall 命令。

目標多個資料庫

pg_dump 命令旨在匯出與單一資料庫相關的資訊。若要一次目標多個資料庫,您可以改為替換為 pg_dumpall 命令,其遵循類似的語法。

若要傾印 PostgreSQL 叢集中的所有資料庫結構描述,請輸入

pg_dumpall --schema-only > all_schemas.sql

如果您想要限制傾印的資料庫,您可以選擇性地包含 --exclude-database= 選項。這可以多次使用以目標個別資料庫

pg_dumpall --schema-only --exclude-database=FIRST --exclude-database=SECOND > almost_all_schemas.sql

它也可以使用萬用字元樣式比對,以使用單一模式捕獲多個資料庫

pg_dumpall --schema-only --exclude-database='SALES_*' > all_schemas_except_sales.sql

僅匯出特定結構

您也可以透過命名要匯出的特定表格來減少匯出的結構

  • --table= / -t:僅傾印符合給定模式的表格。可以多次提供。
  • --exclude-table= / -T:排除符合給定模式的表格。可以多次提供。

例如,如果您的 SALES 資料庫中的三個表格分別名為 EMPLOYEESTOREINVENTORY,全部在預設 public 結構描述中定義,您可以僅透過輸入以下內容來匯出這些結構

pg_dump --schema-only --table='public."EMPLOYEE"' --table='public."STORE"' --table='public."INVENTORY"' SALES > some_sales_tables.sql

注意:您可以在我們關於如何在 PostgreSQL 中使用單引號和雙引號的指南中,找到更多關於 PostgreSQL 如何解釋不同類型引號的資訊。

如果您想要所有銷售資料,除了這三個表格之外,您可以改為使用

pg_dump --schema-only --exclude-table='public."EMPLOYEE"' --exclude-table='public."STORE"' --exclude-table='public."INVENTORY"' SALES > some_sales_tables.sql

其他相關選項

根據您的目標,一些可能有用的其他選項包括

  • --create / -C:包含在傾印其包含的結構之前建立資料庫本身的命令。
  • --clean / -c:輸出命令以在建立資料庫物件之前先刪除它們。
  • --if-exists:僅在使用 --clean 時相關,將導致 pg_dump 僅嘗試刪除資料庫中已存在的資料庫物件。

例如,如果您想要在結構描述匯出中包含建立資料庫本身的命令,您可以輸入

pg_dump --schema-only --create SALES > sales_db_schema.sql

若要在建立 SALES 資料庫中的任何資料庫物件之前先刪除它們,您可以改為使用

pg_dump --schema-only --clean --if-exists SALES > sales_db_schema.sql

結論

能夠匯出您的結構描述可讓您將資料庫結構儲存在資料庫本身之外。這在設定新環境、隨著需求變化演進結構描述以及視覺化您正在儲存的資訊結構時很有幫助。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎架構和開發人員工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。