PostgreSQL / 簡短指南

如何在 PostgreSQL 中匯出資料庫和表 Schema

分享至

引言

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

在本簡短指南中,我們將討論如何使用 pg_dump 命令匯出 PostgreSQL 資料庫 Schema。雖然此實用程式可以從 PostgreSQL 匯出多種型別的資料,但本指南中我們只關注提取資料結構本身。

基本用法

從 PostgreSQL 匯出資料庫 Schema 所需的基本命令如下所示:

pg_dump --schema-only DATABASE > schema.sql

根據您的 PostgreSQL 配置,您可能還需要包含以下一些選項:

  • --username= / -U:您希望用於認證的資料庫使用者名稱
  • --password / -W:強制 pg_dump 提示輸入密碼進行認證
  • --host= / -h:PostgreSQL 所在的 hostname 或 IP 地址
  • --port= / -p:PostgreSQL 正在監聽的埠號

告訴 pg_dump 只包含資料庫結構而不包含資料本身的選項是 --schema-only

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

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

利用這些資訊,您可以使用名為 sales_reporter 的受限使用者,透過以下命令匯出名為 SALES 的資料庫 Schema

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

修改匯出行為

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

針對多個數據庫

pg_dump 命令旨在匯出與單個數據庫相關的資訊。要一次針對多個數據庫,您可以改為使用 pg_dumpall 命令,其語法類似。

要轉儲 PostgreSQL 叢集中的所有資料庫 Schema,請鍵入

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 Schema 中,您可以透過鍵入以下命令僅匯出這些結構:

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 僅嘗試刪除資料庫中已存在的資料庫物件。

例如,如果您想在 Schema 匯出中包含建立資料庫本身的命令,您可以鍵入:

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

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

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

總結

能夠匯出您的 Schema 可以讓您將資料庫結構儲存在資料庫本身之外。這在設定新環境、根據需求變化演進 Schema 以及視覺化您儲存的資訊結構時非常有用。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎設施和開發工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必用第三人稱寫作,這讓所有相關方都鬆了一口氣。
© . This site is unofficial and not affiliated with Prisma Data, Inc.