分享到

概觀

本指南說明如何從 PostgreSQL 資料庫匯出資料以及將資料匯入 PostgreSQL 資料庫。您可以在官方 PostgreSQL 文件中了解有關此主題的更多資訊。

使用 pg_dump 匯出資料

pg_dump 是一個原生的 PostgreSQL 實用程式,可用於從 PostgreSQL 資料庫匯出資料。若要查看此命令的所有選項,請執行

pg_dump --help

摘錄自 PostgreSQL 文件

此傾印方法的想法是產生一個包含 SQL 命令的檔案,當將該檔案回饋到伺服器時,將以與傾印時相同的狀態重建資料庫。PostgreSQL 提供了實用程式 pg_dump 來實現此目的。pg_dump 是一個常規的 PostgreSQL 用戶端應用程式(儘管它是一個特別聰明的應用程式)。這表示您可以從任何有權存取資料庫的遠端主機執行此備份程序。但請記住,pg_dump 不會使用特殊權限運作。特別是,它必須具有對您要備份的所有表格的讀取權限,因此為了備份整個資料庫,您幾乎總是必須以資料庫超級使用者的身分執行它。

命令的基本語法如下所示

pg_dump DB_NAME > OUTPUT_FILE

您需要將 DB_NAMEOUTPUT_FILE 預留位置替換為以下項目的各自值

  • 您的資料庫名稱
  • 所需輸出檔案的名稱(為了獲得最佳互通性,應以 .sql 結尾)

例如,若要從本機 PostgreSQL 伺服器上名為 mydb 的資料庫匯出資料到名為 mydb.sql 的檔案中,您可以使用以下命令

pg_dump mydb > mydb.sql

如果您的資料庫結構描述使用物件識別碼類型 (OID),則需要使用 --oids(簡寫:-o)選項執行 pg_dump

pg_dump mydb --oids > mydb.sql

提供資料庫憑證

您可以新增以下引數來指定 PostgreSQL 資料庫伺服器的位置

引數預設值環境變數描述
--host(簡寫:-hlocalhostPGHOST伺服器主機的位址
--port(簡寫:-p-PGPORTPostgreSQL 伺服器正在接聽的伺服器主機的連接埠

若要針對 PostgreSQL 資料庫伺服器進行身份驗證,您可以使用以下引數

引數預設值環境變數描述
--username(簡寫:-U您目前的作業系統使用者名稱PGUSER資料庫使用者的名稱。

例如,如果您想要從具有以下連線字串的 PostgreSQL 資料庫匯出資料

postgresql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com:5432/d50rgmkqi2ipus

您可以使用以下 pg_dump 命令

pg_dump --host ec2-46-137-91-216.eu-west-1.compute.amazonaws.com --port 5432 --user opnmyfngbknppm d50rgmkqi2ipus > backup.sql

請注意,此命令將觸發提示,您需要在其中指定所提供使用者的密碼

控制輸出

在某些情況下,您可能不想傾印整個資料庫,例如,您可能想要

  • 僅傾印實際資料,但排除 DDL(即定義資料庫結構描述的 SQL 陳述式,例如 CREATE TABLE,...)
  • 僅傾印 DDL,但排除實際資料
  • 排除特定的 PostgreSQL 結構描述
  • 排除大型檔案
  • 排除特定表格

以下是您可以在這些情況下使用的一些命令列選項的概觀

引數預設值描述
--data-only(簡寫:-afalse排除任何 DDL 陳述式,並且僅匯出資料。
--schema-only(簡寫:-sfalse排除資料,並且僅匯出 DDL 陳述式。
--blobs(簡寫:-btrue,除非指定了 -schema--table--schema-only 選項包含二進位大型物件。
--no-blobs(簡寫:-Bfalse排除二進位大型物件。
--table(簡寫:-t預設包含所有表格明確指定要傾印的表格名稱。
--exclude-table(簡寫:-T-從傾印中排除特定表格。

從 SQL 檔案匯入資料

在使用 SQL Dump 將 PostgreSQL 資料庫匯出為 SQL 檔案之後,您可以將 SQL 檔案饋送到 psql 中,以還原資料庫的狀態

psql DB_NAME < INPUT_FILE

您需要將 DB_NAMEINPUT_FILE 預留位置替換為以下項目的各自值

  • 您的資料庫名稱(必須事先建立具有該名稱的資料庫!)
  • 目標輸入檔案的名稱(可能以 .sql 結尾)

若要事先建立資料庫 DB_NAME,您可以使用 template0(它會建立一個不包含任何站點本地新增項目的純使用者資料庫)

CREATE DATABASE dbname TEMPLATE template0;

結論

從 PostgreSQL 匯出資料並再次擷取以重建您的資料結構和填入資料庫是遷移資料、備份和復原或準備複寫的好方法。了解 pg_dumppsql 工具如何協同工作以完成此任務將有助於您跨資料庫邊界傳輸資料。

關於作者
Justin Ellingwood

Justin Ellingwood

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