MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

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

2016年12月11日 星期日

postgresql.conf 的 listen_addresses 到底在幹麻的?

在 PostgreSQL 的設定檔 postgresql.conf 裡面,第一項會遇到的參數就是 listen_address
listen_addresses = 'localhost'
listen_addresses = '*'
listen_addresses = '0.0.0.0/0'
listen_addresses = 'localhost,127.0.0.1,10.140.0.2'

上面四種設置有何不同?

2016年12月8日 星期四

mongo_fdw 筆記

MongoDB 資料庫是現在知名的 NoSQL 資料庫,他讓程式開發部門「避開」與資料庫管理人員申請資料欄位的往返溝通,直接塞想要的資料存起來。聽說這在作為網頁後端資料庫很方便。
要是想要把這裡面的資料拉出來分析,就稍微不方便一些,因為他的資料都塞在一份份的 JSON 檔案裡面,要單獨取出大量某個「欄位」(JSON Key)的資料作運算,分析,就有點不方便,尤其要進行普通的關聯式資料庫的 JOIN,尤其不容易。
PostgreSQL 提供的 Foreign Data Wrapper 中,有跨接 MongoDB 的套件,叫做 mongo_fdw,是一個由 EnterpriseDB 公司維護的開源專案。這個模組能夠對 MongoDB 的 JSON 資料,取過來 PostgreSQL 裡面,當成一般表格處理,便能夠和現有資料庫的資料,進行進一步的分析。

以下將示範 mongo_fdw 的套件使用流程。

2016年12月5日 星期一

PostgreSQL 的稽核紀錄(Audit Log)功能套件 - pgAudit

稽核日誌(Audit Log)泛指用來紀錄程式活動的紀錄,在企業中很常被應用。在資料庫使用也是重要的功能。

一般要紀錄資料庫活動,可以自己用 Trigger 設計。不過在 EnterpriseDB 提供的企業版 PostgreSQL 裡面也有 edb_audit 的功能,可以不用自己設計 Trigger 就能進行紀錄。

而使用原生的 PostgreSQL,則可以用 PGAudit 這個專案。

這篇便紀錄在 CentOS7 下使用 PGAudit 套件的練習。

以下安裝流程,對於 EnterpriseDB 發行的 PostgreSQL 發行版亦適用:惟需要將相關路徑社製作些許調整。

2016年12月1日 星期四

EFM 2.1 版的 Active/Passive Switchover 切換功能

EnterpriseDB 的訂閱服務提供的資料庫高可用套件 — EDB Failover Manager(EFM),前一陣子(2016 年九月)釋出更新版,2.1 版。EFM 在先前的筆記已經有紀錄過 2.0 版的操作(之前筆記)。

在這次更新版中,引進一個重要的新功能 — 資料庫 Active/Passive Switchover 功能。這個功能,能夠將 Active 資料庫(Read-Write)/Pssive 資料庫(Read-Only)角色對調。

該功能在維護資料庫上,提供相當方便性:當有主機維護的需要,便可以依照需要,將 Master 資料庫與 Standby 資料庫對調,將 Standby 主機下線,處理完畢再上線便不會影響 Master 運作。

該功能支援 PostgreSQL 9.3 版本以上的資料庫:這是由於自此版本開始,在 recovery.conf 設定檔中,引進了 recovery_target_timeline 參數。該參數允許資料庫交易日誌的「timeline 接軌」的功能。(忘了 recovery.conf 是什麼?請參考之前 Point-in-Time Recovery 或 Streaming Replication 的筆記)


2016年11月16日 星期三

檢視當前的 PostgreSQL Log 的偷懶 Script

每次要一直找新的 PostgreSQL Log 檔名有點麻煩,在這裡作個很簡單的紀錄 ...
把下面這個 Shell Script 的資訊 PGUSER(登入帳號)、PGDATA(資料目錄)、PGDATABASE(登入的資料庫)然後執行,可以比較簡單的找出 Log 檔查看。
#!/bin/bash


PGUSER=enterprisedb
PGDATA=/opt/PostgresPlus/9.5AS/data
PGDATABASE=edb


LATEST_LOG="SELECT pg_ls_dir
 FROM pg_ls_dir('pg_log')
 ORDER BY (pg_stat_file('pg_log/' || pg_ls_dir)).modification DESC
 LIMIT 1;"


CURRENT_PGLOG_FILE=(`psql -U PGUSER -d "${PGDATABASE}" -c "${LATEST_LOG}" --tuples-only`)


tail -f $PGDATA/pg_log/$CURRENT_PGLOG_FILE

顯然,這個 Script 只有在資料庫有在運作的時候才有用處,資料庫要是是關掉的,這就派不上用場了。當然也可以把 Script 的 LATEST_LOG 變數換成在 Shell 裡面列舉最新的 Log 檔案就好了。

參考資料:


2016年11月10日 星期四

同一個 Postgres Cluster 的不同資料庫之間的資料怎麼溝通?

在同一個 PostgreSQL Instance(或稱作一個 PostgreSQL Cluster)裡面,不同的 Database 間要交換資料,這看起來是個小小問題,但其實只能走連線交換資料的方式,沒有想像中的直覺。

PostgreSQL 提供以下兩種方式進行:
1. 用 Postgres_FDW 存取外部表
2. 用 DBLink 連到其他資料庫

其中的 postgres_fdw 在最近發展功能越來越豐富,因此一般建議使用 Postgres_FDW 去進行不同 Database 之間,資料的交換。

以下簡單示範在 EDB 公司的 PostgreSQL 9.5 企業版中使用 postgres_fdw 進行存取。
來源的 database 是 edb,以及裡面的範例資料 Schema;然後在另外一個 database,postgres 建立外部表。


以下即操作步驟

2016年11月7日 星期一

練習 - 用 pgAgent 定時透過 foreign data wrapper 拉資料

有時會希望透過 PostgreSQL 拉資料來進行分析,來減輕工作中資料庫的負擔。這一般是利用所謂 ETL 工具定時拉資料達成。不過由於 PostgreSQL 本身就有排程工具的專案,而且在近幾版本的 PostgreSQL9.x 能夠外接資料,因此用此來試試看。

pgAgent 是一個 PostgreSQL 的排程作業工具,而 Foreign Data Wrapper 是 PostgreSQL 的外部資料源存取架構。這兩樣搭起來,加上在 9.5 版引入的UPSERT 功能:INSERT ... ON CONFLICT ... ,就能達成跨資料庫進行資料更新/同步的作業雛型。

以下雛型的練習,方便起見,將從同一個 PostgreSQL Instance 的兩個 Database 之間用 Foreign Data Wrapper 更新資料