MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

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

2019年12月1日 星期日

再探 Streaming Replication — PGSQL 12 上面的設定筆記

在 PGSQL 12 開始,recovery.conf 檔案正式與 postgresql.conf / postgresql.auto.conf 合併,由同一份檔案設定所有資料庫參數了。
因此這邊紀錄新的 Streaming Replication 設置方式。

2019年10月7日 星期一

LXD 裡面的 CentOS 7 Container 必要功能補完

LXC/LXD Container 用途與 Docker 不同,主要用來提供完整的 Linux 操作環境。不過由於取得的 Image 是精簡版本的 OS,啟動一個 Container 之後,有一些常常用的小功能要補上。

這邊紀錄目前使用 LXD CentOS 7 Image 遇到的功能補完。

2019年10月2日 星期三

PGSQL 的表格最後交易時間 (9.5+ 適用)

在某些情況下,會想要查看表格最後異動時間。不幸的是,PostgreSQL 沒有這種功能。

表格最後異動時間,在 Greenplum 某些結構表單裡面有紀錄(Append-Only Table 儲存結構)。但是截至 Postgres 12 為止,沒有這種儲存結構(還只有 Heap Table 的結構)。通常有這樣的需要時,就得增加一個時戳欄位,搭配 AP 上面要有相應的設計或是加一點 Trigger 才行。

然而,Postgres 在 v9.5 之後有提供 track_commit_timestamp 功能,可以用來接近這樣的需求~

2019年9月6日 星期五

在 LXD 3 裡面設置 Docker 19.03.2 的 Swarm 叢集~

日前在嘗試用 LXC/LXD 模擬 Docker Swarm 節點,遇到設置上無法生效的狀況。。。因此之前的筆記只有基本的 Docker 功能
不過,現在捲土重來了~原來是之前遺漏了幾篇參考教學才會做不出來~~
主要的解法,在於 LXD 支援的 linux.kernel_modules 參數。現在就補上這個紀錄,以後確定也可以在 LXD 裡面練習 Docker Swarm 了~~

2019年9月1日 星期日

在 Postgres 用 PGroonga 作正體中文全文檢索簡單測試筆記

PGSQL 內建有不錯的全文檢索功能,而且支援多種語言。但是,內建的全文檢索功能沒有直接支援東亞的 CJK 語言。
中文的部份的全文檢索,目前看到的資訊,只有中國的社群開發的簡體中文相關外掛,但這不夠適合台灣的正體中文使用;這主要是兩國文化不同,適用中國的字典檔在切詞上不完全適用於台灣的關係。
不過,還有其他的方案,主要是由日本社群所採用的外掛,分別有 pg_bigm 以及 PGroonga 也支援 CJK 的全文檢索。
最近剛好看到,PGroonga 針對 PGDG YUM Repo 的版本有提供 RHEL 現成的套件(不好意思,我很懶惰,只想用現成的。。。),在台灣 PGroonga 這個套件有點少人提到,因此這邊就嘗試看看,看看可不可以用來作為正體中文的全文檢索工具。

2019年8月1日 星期四

找出 PGSQL 裡面被綁太久的 Table Lock

在 Postgres 裡面,Lock 是一套狀態標記系統,資料庫裡面每個動作,一定有一個 Lock 等級標誌著;這個標記表現行為的優先順序,有點像是階級一樣。。。。因此,在 PGSQL 裡面看到 Lock 的話,千萬不要馬上套用其他資料庫的經驗,馬上把 Session 砍掉。
然而,實際使用上,資料庫常常會因為 Lock 遇到一些狀況。這邊用一個模擬狀況,示範日常需要的 Lock 監控要怎麼在 PGSQL 進行。
本處所示範的情況
 - 是習慣其他關聯式資料庫的人所熟知的日常監控與剔除的目標
 - 但是在 PGSQL 裡面,不叫做 Dead Lock!!!

2019年7月28日 星期日

Postgres 10+ 的正體中文筆劃排序

多數資料庫在語系設定上,有一種叫做 Collation 的功能,這個東西負責決定排序規則。
通常只有數字/英文字母的資料,排序上很單純,就依照英文字母歌的順序一樣~
但是遇到其他語言的文字。。。就需要好好設定 Collation 了。
目前作業系統都會內建多國語言排序模組,例如,在 Linux 就有標準的 libc 函式庫可以用。多數需要用到排序的主流軟體(文書編輯器、資料庫)都會呼叫這個模組以支援多國語言資料排序功能。但這在不同 OS 之間會有不同差異,換了 OS 就有可能就會有些不同。
PGSQL 在 v10 之後,額外提供了 ICU 這個標準模組的整合,用來強化排序的跨平台一致性。

這邊會在 EDB PGSQL 11 企業版上以生活中常用的中文筆劃排序的設定練習,簡單紀錄一次~這些步驟在原生的 PGSQL 11 也適用~

2019年6月9日 星期日

不小心在 EDB 企業版鎖住 Superuser 帳號時。。。

在 EDB 提供的 Postgres 企業版所內建的 Oracle 相容功能中,有提供 Oracle 帳號的 Account Lock 功能
若。。。不小心把這個功能指定到資料庫的 Superuser(enterprisedb),把 enterprisedb 鎖住了,然後又已經登出了。。
edb=# alter user enterprisedb account lock;
ALTER ROLE
edb=# \q
-bash-4.2$ 
-bash-4.2$ psql -U enterprisedb
psql.bin: FATAL:  role "enterprisedb" is locked
-bash-4.2$ 

又偏偏沒有其他 Superuser 帳號的話,該怎辦。。。

2019年6月8日 星期六

在 elementary OS Juno 5.0 (Ubuntu 18.04 延伸版) 裡面使用 LXD(LXC 進化版)

因為稍稍用一點點時間,把一台舊電腦打掉處理成一台裝了 elementary OS (Ubuntu 的延伸版,假 Mac)的測試用電腦。順便決定試著用看看 LXC 進階版的 LXD 作叢集環境演練。
結果。。。竟然發現!三兩下就設置完畢了,而且前面好幾篇的設置,竟然在 LXD 都處理妥當了~
也就是說,使用 LXD 作叢集測試環境,是更加更加方便的~這篇筆記,簡要紀錄一下設置環境

2019年6月1日 星期六

EDB 11 遮碼功能小筆記—用群組控制遮碼

之前紀錄 EDB 11 的遮碼功能的小小應用,主要是使用特別一點的函數來處理。這邊再紀錄一下,怎麼樣對多個帳號遮碼

2019年5月13日 星期一

EDB Postgres 對 Hadoop 的外部表:hdfs_fdw v2 筆記 — 透過 Hive 界面

EnterpriseDB 提供能夠連線到 Hadoop 平台的 Foreign Data Wrapper,hdfs_fdw,能夠讓 PostgreSQL 資料庫直接把 Hadoop 上面的資料表當成 PostgreSQL 的表格,如此讓 PostgreSQL 直接存取冷資料。

雖然名稱叫做 HDFS 的 FDW,但是 hdfs_fdw 所溝通的是 Hive 跟 Spark 而非 HDFS 本身 ....

EnterpriseDB 對其所提供的 PostgreSQL 發行版和企業版提供 hdfs_fdw 安裝檔,以及社群 YUM Repo 也有提供相關 RPM,不用自己從原始碼編譯。這裡是功能測試的紀錄。

2019年5月10日 星期五

在 LXC 裝一個 Apache Hadoop / Hive 測試環境

這篇是為了測試 PGSQL 的 hdfs_fdw 外部表外掛,而準備的單節點 Hadoop + Hive 的設置筆記。如果要參考完整的正式環境的人,就可以跳過啦~

2019年5月9日 星期四

把 SQL 查詢結果,存到 psql 的變數中

這是一個 psql 指令的 Scripting 強化功能,適用在 PGSQL 9.3 之後的 psql Client。

(安全的)在 PGSQL 11 裡面查看主機目錄內容

PGSQL 有提供一個函數 pg_ls_dir(),用來查看主機底下的目錄內容,一直以來
沒什麼太大用途的感覺。。不過,PGSQL 在 v11 幫這個函數導入一個新功能~
方便我們在綁手綁腳的情況底下(例如,僅能透過 pgAdmin 等 UI 看資料庫,不能
夠使用 SSH 登入主機進行管理、操作),一窺主機的狀況。

話先說在前頭,這個強效新特性是需要特殊權限才能操作,不要誤認成漏洞了~!

2019年5月2日 星期四

EDB PostgreSQL 企業版資料庫的 RPM 套件安裝方式

EnterpriseDB 在 PostgreSQL 11 釋出之後,調整了資料庫軟體的發行方式:
  • 對 Windows 以及 Mac OS 仍然有提供 PostgreSQL 互動式安裝程式
  • 不再提供 Linux 作業系統下 PostgreSQL 的互動式安裝檔
  • 企業版軟體(EDB Postgres Advanced Server,EPAS)也不再提供 Linux 作業系統下的互動式安裝檔
  • 不論是原生的 PostgreSQL 或是企業版軟體,對 Linux 的支援,改以維護主流的 OS 發行版的套件庫(YUM 以及 APT)
  • 企業版軟體,仍然提供 Windows 平台的互動式安裝檔(近兩大版本的軟體),以提供軟體試用服務
  • 提供企業版資料庫的 Docker Image
  • 雲端資料庫:在各大公有雲都有提供企業版軟體,以及 EDB 自己的 Cloud Database Service

這篇紀錄一下企業版軟體在 Red Hat 系列作業系統中安裝的方式。

2019年4月4日 星期四

以一個 VM 擋十個 LXC Container — 具有 SystemD 功能的軟體叢集演練環境設置筆記

之前有紀錄一個用 Docker 運作包含 SystemD 的 Container。但是用起來還是有點不順手。因為畢竟 Docker 已經針對 Image 作很多特點上的調整,若用來作單純的 OS 操作,其實並不夠方便。

後來發現 Docker 的前身,LXC,雖然功能不及 Docker 豐富,但是其特性恰巧更適合把 Container 當成 OS 來操作。尤其在演練需要設置叢集的軟體時,更值得用 LXC 節省測試環境的資源開銷。

[Update 2019/6/9LXD(LXC 強化版)的筆記在這:比這一系列更輕易設定~還可以設定多張虛擬網卡環境喔
[Update 2019/9/7] LXD 裡面確認可以運作 Docker Swarm 叢集了,筆記在這

CentOS 7.x 上面的 LXC 測試環境 (7) - 在 LXC Container 裡面執行 Docker CE Engine(Container in Container)

理想上,要演練 docker Swarm 或是 K8S 的功能,通常會需要多個 VM 來測試叢集,不過這樣自己的電腦都會卡卡的。。。有了 LXC,就會想嘗試替代多個 VM,來設置這樣的「多節點」環境,讓電腦更輕鬆的運作這樣的叢集~

但是。。目前的現狀(LXC 2 / LXD 3 以及 Docker 18.09),Docker CE Engine 雖然可以運作,但是  Docker Swarm 部份,會嘗試載入 Kernel Module,以提供正常的 Overlay 網路功能,目前這一部份在 LXC/LXD 裡面還是有些狀況。。。

不過,這邊把目前作的到的,在 LXC 裡面設置 Docker Engine 的筆記,一樣紀錄起來。至於 Docker Swarm,可能要看看以後有沒有機會改善了。。

[Update 2019/9/7] LXD 裡面確認可以運作 Docker Swarm 叢集了,筆記在這

CentOS 7.x 上面的 LXC 測試環境 (6) - 在 CentOS 7 Host 建立 CentOS 6 LXC Container

有時需要準備 CentOS 6 的環境,可以直接利用 LXC Container。
LXC 的進階專案 LXD 提供 Container Image Repository,可以直接抓需要的 Linux Distribution。
這份筆記紀錄在 LXC 產生 CentOS 6 Container 的方式。
Note] 由於 RHEL 6 會在 11/30/2020 EOL,不能確定到時是否 Repository 是否還會提供

CentOS 7.x 上面的 LXC 測試環境 (5) - 把 LXC Container 裡面的服務的 Port 轉發到 Host 的 Port

不是所有軟體都靠指令、Confing 互動就可以完成,有些產品需要把服務的 Port 映射到 Host 的 Port 上讓外部可以存取,才有辦法進行進一步的操作跟演練。例如,許多產品有提供 Web UI 的界面作管理操作,若放在 Container 裡面,就會需要把相關網頁服務弄出來,讓外面可以正常用瀏覽器開啟,進行操作。

這邊示範把某個 Apache HTTPd 服務的 Container 的 80 Port 導向 Host VM 的某個 Port(這邊一樣選 Host 的 80 Port),以便讓我們進行操作。

CentOS 7.x 上面的 LXC 測試環境 (4) - 將 Host 目錄同時掛載到多個 LXC Container 中

LXC 可以讓不同 Container 之間都可以共同存取,用來假裝 NFS 目錄,作一些情境演練。例如,PostgreSQL 的 HA 設置中,需要共用目錄存放 WAL 備份。
當然,直接讓某個 Container 設置 NFS 讓其他 Container 存取也是完全 OK 的~

CentOS 7.x 上面的 LXC 測試環境 (3) - 建立 LXC Container 環境使用的 Local YUM Repo

有些提供 RPM 的軟體產品,需要演練在客戶端離線安裝的狀況。
這份紀錄如何預先下載套件,並建立 Local YUM Repo 讓其他 Container 存取。
這邊會使用到 HTTPD 服務,上一份已經預先處理好了。
這份筆記內容
 - 延續上一篇筆記的環境,搭配 EDB 的軟體安裝檔作建立 YUM Repo 的示範。
 - 使用 YUM Download Only 功能,預先準備需要的相依 RPM
這邊的範例,也可以適用到其他東西上~
(Note:這篇在 LXC 上面並不顯然喔,需要小小 Workaround 才行~)

2019年4月3日 星期三

CentOS 7.x 上面的 LXC 測試環境 (2) - 透過一些簡易 Script 使用 Container

因為篇幅的關係,這篇緊接著前一篇筆記,繼續完成 LXC 的基本使用。
這部份會提供的 Script:

  1. 建立一個 CentOS 7 Container
  2. 啟用一組 Container、查看現有 Container
  3. 登入 Container
  4. 停用所有 Container

CentOS 7.x 上面的 LXC 測試環境 (1) - 建立測試環境

這份筆記要利用 Linux Container(LXC)功能,設置輕量的軟體產品叢集演練環境,並且完整支援 OS 的 INIT 控制指令(CentOS 7 的 SystemD)。相較於使用多個 VM,透過 LXC,記憶體用量與磁碟用量都可以相當比例的節省,可以在一台電腦上撐更多模擬的主機節點,適合用在教育訓練或體驗營中。唯獨 Container 初始化都是精簡的內容,有些指令可能需要手動安裝才行,這需要事前需要先演練一次,才能確認需要補上的 Package。

這邊使用的 Container Host 為 CentOS 7.x,主要的要求是 Linux Kernel 需要 3.x 以上(可以用 CentOS 6.x、但是需要搭配 libvirt),並且採用 SystemD 作為 INIT 系統的 OS(方便後續的演練相容性)。

不使用 Docker 的理由:Docker Container 主在求精鍊,並打包成 Image 透過載入的方式產生運行的軟體服務。Docker Container 也傾向以 “1 image, 1 service” 來處理,不傾向在裡面啟動多個服務。Docker Container 裡面簡化 INIT 的支援,因此把 Docker Container 當成 OS 作演練比較麻煩。LXC Container 單純以 chroot 手法,以實體 OS 目錄運作,且完整支援 SystemD INIT,更加貼近實際架構設置環境,比起 Docker 長的更像一個 VM,比較適合作演練用途。

下圖為設置後的環境範例

這份筆記的範圍:
  • 設置具有 LXC 的 VM 環境(Privileged Container)
  • 設置基本 Container 網路,使 (1) Container 之間互通 (2) Container 可以訪問外面
緊接著在下一篇,會提供幾個簡易的控制 Script(產生 Container、啟動、停止、進入 Console)。

這邊的 Container 使用的是 Privileged Container,使用 root 啟動、進入後也是 root 帳號,僅作為練習環境用。普通帳號用的 Unprivileged Container 不在這筆記的範圍。

2019年4月1日 星期一

Postgres 設定系統參數 (GUC) 的小小注意事項

PostgreSQL 的設定檔 $PGDATA/postgresql.conf 是一份落落長的文字檔,裡面放了大多數要設定的資料庫參數(稱作 GUC),大多狀況要進行設定的參數僅僅十多項而已,但編輯的時候,總是令人頭昏眼花。

不過,除了直接修改 $PGDATA/postgresql.conf 內容之外,其實還可以用 ALTER SYSTEM 這個 SQL 指令調整這些參數值。

2019年3月24日 星期日

從 Postgres 11.2 對 Greenplum 5.17.0 作 Materialized View

好久以前有紀錄從 Postgres 開 postgres_fdw 連線到 Greenplum 的筆記,前一陣子又看到 Materialized Views and Foreign Data Wrappers | EnterpriseDB 這篇文章,拿來試著對 Greenplum 試試看~

在 Postgres 11 的 Materialized View,進行刷新(REFRESH MATERILAIZED VIEW)會把資料整組清掉,重新查詢並把結果拉回來快取。

現在,要透過 Foreign Data Wrapper,搭配 Materialized View,從 Greenplum(基於 PostgreSQL 的延伸專案)把查詢拉到 Postgres 裡面。

2019年2月1日 星期五

EDB 11 新功能 — 內建資料遮碼(Data Redaction)

EDB 的企業版 EDB Postgres Advanced Server 11 新增了幾個內建新功能,其中一個是資料遮碼功能(Data Redaction)。
這個功能主要是把資料打叉叉的功能,其實這已經在 SQL Server 跟 Oracle 有提供了,但是 Postgres 需要 DIY 處理,日前 EDB 有提供教學文章~
現在 EDB 直接提供整合的管理,應用上更貼近 SQL Server 跟 Oracle 一些,不用像使用純 PGSQL 要 DIY;而且 DIY 的物件一多起來,維護人員就會眼花撩亂了~

在這邊整合資料遮碼以及外部表作該功能的練習~

2019年1月9日 星期三

把 iris 資料集放進 PGSQL

iris 資料集,是資料分析的入門範例資料集,很多的入門教學都會用到這份資料作範例。這邊把大統計學家 Ronald Fisher 使用的 iris 資料拿來匯入 PGSQL 裡面,用一點點 PGSQL 的功能讓儲存便簡潔一點點,順便把裡面提到的幾項敘述統計量整理成一個 VIew。以便作為延伸學習的敲門磚~~