概述
本指南介紹瞭如何從 PostgreSQL 資料庫匯出資料以及如何將資料匯入到 PostgreSQL 資料庫中。你可以在官方的 PostgreSQL 文件中瞭解更多關於此主題的資訊。
使用 pg_dump 匯出資料
pg_dump 是一個原生的 PostgreSQL 實用程式,可用於從 PostgreSQL 資料庫匯出資料。要檢視此命令的所有選項,請執行
pg_dump --help
這種轉儲方法的思想是生成一個包含 SQL 命令的檔案,當將其重新輸入到伺服器時,這些命令將以轉儲時的相同狀態重新建立資料庫。PostgreSQL 為此目的提供了實用程式
pg_dump。pg_dump是一個常規的 PostgreSQL 客戶端應用程式(儘管它非常巧妙)。這意味著你可以從任何可以訪問資料庫的遠端主機執行此備份過程。但請記住,pg_dump不具備特殊許可權。特別是,它必須對所有要備份的表具有讀取訪問許可權,因此為了備份整個資料庫,你幾乎總是需要以資料庫超級使用者身份執行它。
該命令的基本語法如下
pg_dump DB_NAME > OUTPUT_FILE
你需要將 DB_NAME 和 OUTPUT_FILE 佔位符替換為相應的值:
- 你的資料庫名稱
- 所需的輸出檔案名稱(為獲得最佳互操作性,應以
.sql結尾)
例如,要將本地 PostgreSQL 伺服器上名為 mydb 的資料庫中的資料匯出到名為 mydb.sql 的檔案中,可以使用以下命令:
pg_dump mydb > mydb.sql
如果你的資料庫模式使用了 物件識別符號型別 (OIDs),你需要使用 --oids(簡寫:-o)選項執行 pg_dump:
pg_dump mydb --oids > mydb.sql
提供資料庫憑據
你可以新增以下引數來指定 PostgreSQL 資料庫伺服器的位置:
| 引數 | 預設 | 環境變數 | 描述 |
|---|---|---|---|
--host(簡寫:-h) | localhost | PGHOST | 伺服器主機的地址 |
--port(簡寫:-p) | - | PGPORT | PostgreSQL 伺服器正在監聽的伺服器主機的埠 |
要對 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 模式
- 排除大檔案
- 排除特定表
以下是你在這些場景中可以使用的一些命令列選項的概述:
從 SQL 檔案匯入資料
在使用 SQL Dump 將 PostgreSQL 資料庫匯出為 SQL 檔案後,你可以透過將 SQL 檔案輸入到 psql 中來恢復資料庫狀態:
psql DB_NAME < INPUT_FILE
你需要將 DB_NAME 和 INPUT_FILE 佔位符替換為相應的數值:
- 你的資料庫名稱(必須事先建立同名數據庫!)
- 目標輸入檔案的名稱(可能以
.sql結尾)
要預先建立資料庫 DB_NAME,你可以使用 template0(它會建立一個不包含任何站點本地新增內容的普通使用者資料庫):
CREATE DATABASE dbname TEMPLATE template0;
結論
從 PostgreSQL 匯出資料並再次匯入以重新建立資料結構和填充資料庫是資料遷移、備份恢復或為複製做準備的良好方式。瞭解 pg_dump 和 psql 工具如何協同完成此任務將幫助你跨資料庫邊界傳輸資料。
