引言
在關係型資料庫中,資料庫 Schema 定義了資料庫及其組成部分(如表、欄位和索引)的結構。提取和匯出此資訊在許多場景中都很有用,包括備份、遷移到新環境、視覺化資料結構以及在程式碼庫中管理這些結構。
在本簡短指南中,我們將討論如何使用 pg_dump 命令匯出 PostgreSQL 資料庫 Schema。雖然此實用程式可以從 PostgreSQL 匯出多種型別的資料,但本指南中我們只關注提取資料結構本身。
您可以使用 Prisma Client 在您的 JavaScript 或 TypeScript 應用程式中管理 PostgreSQL 資料庫。瞭解如何將 Prisma 新增到現有專案中,或如何從頭開始使用 Prisma。
基本用法
從 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 資料庫中有三個表名為 EMPLOYEE、STORE 和 INVENTORY,並且它們都定義在預設的 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 以及視覺化您儲存的資訊結構時非常有用。
您可以使用 Prisma Client 在您的 JavaScript 或 TypeScript 應用程式中管理 PostgreSQL 資料庫。瞭解如何將 Prisma 新增到現有專案中,或如何從頭開始使用 Prisma。
