MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2020年3月13日 星期五

PostgreSQL Dump:匯出&匯入步驟小抄

Postgres 要進行升版,可以用匯出/匯入的老方法,或是 pg_upgrade 新方法。目前傾向使用 pg_upgrade,比較少用 Dump 搬遷。
不過。。。因為近期簡單的整理了一下 Dump 的步驟,所以就記錄下來。
這篇特別一點點的地方,主要是用了 psql Script 的互動式問答功能作輔助~

資料匯出

1) 使用 pg_dumpall 作 DDL 匯出
[postgres@old-server ~]$ pg_dumpall --schema-only --file=~/dumpall_ddl.sql

2) 依照需要,微調 DDL 檔 ~/dumpall_ddl.sql:直接用 vim 處理
通常會改的:
 - Tablespace 位置
 - 外部表(Foreign Data Wrapper)連線資訊
 - 表格改成 Partitioned Table

3) 使用 SQL 長出所有的 DB 的 dump 指令(使用 Custome Mode,多執行緒)
以下整理成一份互動式 Script
--
--  Script Name: dmp_restore_cmds.sql
--

\timing off

--  Interactive Prompt
\prompt '# of Jobs: ' njob
\prompt 'Dump File Output dir: ' dmp_dir
\prompt 'New superuser: ' newsuperu
--  Non-Interactive Version
-- \set njob 5
-- \set dmp_dir /tmp/

select set_config('psql.njob', :'njob', false);
select set_config('psql.dmp_dir', :'dmp_dir', false);
select set_config('psql.newsuperu', :'newsuperu', false);

\t on

select '## Data Dump Command'
UNION 
select 
 'nohup pg_dump --data-only -Fd -j ' || 
 current_setting('psql.njob') || 
 ' --disable-trigger --superuser=' || 
 current_setting('psql.newsuperu') || 
 ' --file=' || 
 current_setting('psql.dmp_dir') || '/dmp_' || datname || 
-- ' --host=' || host(inet_server_addr()) || 
 ' --dbname=' || datname || 
 ' 2>&1 &' 
FROM pg_database 
WHERE datname NOT LIKE 'template%';

select '## Data Restore Command'
UNION 
select 
 'nohup pg_restore --data-only -Fd -j ' || 
 current_setting('psql.njob') || 
 ' --disable-trigger --superuser=' || 
 current_setting('psql.newsuperu') || 
 ' --dbname=' || datname || '  ' ||
 current_setting('psql.dmp_dir') || '/dmp_' || datname || 
 ' 2>&1 &' 
FROM pg_database 
WHERE datname NOT LIKE 'template%';

這邊使用一組特別選項,--disable-trigger 與 --superuser,這個在有用到 Foreign Key 的表格資料匯入/匯出時,可以避免資料匯入先後順序造成的錯誤。

4) 使用上面產出的 pg_dump 指令在個別 DB 匯出資料
範例輸出
[postgres@now-server ~]$ psql -f ~/dmp_restore_cmds.sql 
Timing is off.
# of Jobs: 3
Dump File Output dir: /tmp
New superuser: postgres
 set_config 
------------
 3
(1 row)

 set_config 
------------
 /tmp
(1 row)

 set_config 
------------
 postgres
(1 row)

 ## Data Dump Command
 nohup pg_dump --data-only -Fd -j 3  --disable-trigger --superuser=postgres --file=/tmp/dmp_edb --dbname=edb 2>&1 &
 nohup pg_dump --data-only -Fd -j 3  --disable-trigger --superuser=postgres --file=/tmp/dmp_postgres --dbname=postgres 2>&1 &

 ## Data Restore Command
 nohup pg_restore --data-only -Fd -j 3  --disable-trigger --superuser=postgres --dbname=edb  /tmp/dmp_edb 2>&1 &
 nohup pg_restore --data-only -Fd -j 3  --disable-trigger --superuser=postgres --dbname=postgres  /tmp/dmp_postgres 2>&1 &

[postgres@now-server ~]$ 

5) 將資料搬移到新環境
如果上面的 Script 用了 host 的選項(這邊註解掉沒啟用),就可以直接在新環境執行

資料匯入

1) 初始化需要的資料庫&設定
[root@new-server ~]# /usr/pgsql-12/bin/postgresql-12-setup initdb
[root@new-server ~]# service postgresql-12 start

2) 匯入 DDL
執行上面產生的 DDL Script
[postgres@new-server ~]$ psql -f ~/dumpall_ddl.sql

參考

沒有留言:

張貼留言