分享至

概述

本指南介紹瞭如何從 PostgreSQL 資料庫匯出資料以及如何將資料匯入到 PostgreSQL 資料庫中。你可以在官方的 PostgreSQL 文件中瞭解更多關於此主題的資訊。

使用 pg_dump 匯出資料

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

pg_dump --help

摘自 PostgreSQL 文件

這種轉儲方法的思想是生成一個包含 SQL 命令的檔案,當將其重新輸入到伺服器時,這些命令將以轉儲時的相同狀態重新建立資料庫。PostgreSQL 為此目的提供了實用程式 pg_dumppg_dump 是一個常規的 PostgreSQL 客戶端應用程式(儘管它非常巧妙)。這意味著你可以從任何可以訪問資料庫的遠端主機執行此備份過程。但請記住,pg_dump 不具備特殊許可權。特別是,它必須對所有要備份的表具有讀取訪問許可權,因此為了備份整個資料庫,你幾乎總是需要以資料庫超級使用者身份執行它。

該命令的基本語法如下

pg_dump DB_NAME > OUTPUT_FILE

你需要將 DB_NAMEOUTPUT_FILE 佔位符替換為相應的值:

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

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

pg_dump mydb > mydb.sql

如果你的資料庫模式使用了 物件識別符號型別 (OIDs),你需要使用 --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(簡寫:-b如果未指定 -schema--table--schema-only 選項,則為 true包含二進位制大物件。
--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、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這讓所有相關方都鬆了一口氣。
© . This site is unofficial and not affiliated with Prisma Data, Inc.