MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

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

2018年12月20日 星期四

做一隻 Alpine Linux v3.8 的開機隨身碟~

這裡紀錄把近期 docker Container 流行的小型 linux 之一,Alpine Linux,弄到隨身碟上面,變成 RAMDisk OS 的筆記。
這個跟實際把 Alpine Linux 裝起來是不一樣的~
當然,這篇筆記跟 docker Container 也沒什麼關係~

2018年11月22日 星期四

在 PGSQL 裡面把 SQL_ASCII Database 裡面的 Multibytes Encoding 資料轉換到 UTF8 Database

很舊以前,Big5 的資料會放到裡面,不讓資料庫去處理內容。就是所謂的 Garbage in, garbage out. 。這種設置方式是把 PGSQL 資料庫初始化成 LATIN1 的資料庫(也就是 SQL_ASCII 的意思~)。若是 Oracle 的話,則是 iso-8859-1(與 Linux 的 file 指令查看 ASCII 資料所顯示的 MIME 名稱一樣~)
到了現在以 UTF8 為主流編碼的氛圍,可能就會想要把上面這種設置換掉,變成正統 UTF8 編碼,以利於資料交換的使用。
若現在資料已經在 PGSQL 的話,可以怎麼做呢?這邊用一個簡單的例子作練習。

2018年10月16日 星期二

EDB 的 Postgres 企業版的 Docker 容器 v2.3 簡易試用筆記

近日 PostgreSQL 的企業版服務公司 EnterpriseDB 提供了其企業版產品的 Docker 容器服務。只要是 Docker Container 引擎為基礎的容器平台(Docker CE,Docker EE 或其他像 Red Hat OpenShift 平台等)都可以在認證後登入 EDB 提供的 Docker Registry(訂閱期間的用戶都可以~)去拉資料庫的 Image。

這裡簡單紀錄一下 Docker CE 裡面對 EDB Container Registry v2.3 的功能體驗筆記。

2018年10月2日 星期二

在 Postgres 10 擴增 Big5 中文難字 — 從原始碼開始(用 Big5-2003 字碼集)

PostgreSQL 不支援「直接」儲存 Big5 編碼(聽說很古老的版本有支援,但我不清楚...),因此目前的 PGSQL 資料庫支援 Big5 的方式,是把裡面存放的 UTF8 編碼資料,利用內建編碼表,轉換成 Big5 編碼,再把資料送往 Client 端。如果前端送來的是 Big5 編碼,指名 client_encoding 之後,PGSQL 就會進行編碼轉換,以 UTF8 存放到資料庫裡面。

由於 Postgres 會嚴謹檢查資料的規格,不符的會拒絕吃進來,因此遇到沒有內建的 Big5 ↔ UTF8 編碼,會拒絕該筆資料,回傳錯誤。

PGSQL 10 支援的是標準字區,以及 CP950 (可以到 Unicode 官方網站找到 CP950 原始對照表)的 0xf9d6-0xf9d 部份(這件事寫在原始碼的 UCS_to_BIG5.pl 這份 Perl Script 裡面)。在這個範圍之外的 Big5 字碼,對 PGSQL 都是從缺,沒有對應。

但是,上述被拒絕的狀況,在台灣偏偏是常常發生...原因是,過往很多系統都會有自造 Big5 字碼,通常會依照各自單位的內部規則,這些自造字用的字碼區,偏偏又在 PGSQL 不認得的區段,所以會發生錯誤..

因此,這裡要紀錄的是,如何從原始碼擴增字碼,讓 PGSQL 認得自造 Big5 字碼。

2018年9月6日 星期四

PostgreSQL 和 EDB Postgres 企業版的 Stored Procedure 的 debugger 操作筆記

PostgreSQL 有提供 PL/pgSQL 的除錯外掛,啟用後,會整合 pgAdmin4 進行 Stored Procedure 的除錯。
若使用的是企業版,則可以額外進行 Oracle 相容的 Stored Procedure 的除錯。
這裡紀錄 EDB 10 企業版搭配 pgAdmin4 v2 設定的筆記。

2018年8月23日 星期四

在 docker container 裡面執行 systemd 服務(測試環境用~)

RHEL 7 之後引進了 SystemD 這個萬惡的 INIT 系統,以其 Process 的控制上很龜毛嚴謹著稱。
Docker 容器與 Virtual Machine 不同,它本質上是一個運作環境被隔離起來的系統子程序,在 Host 上共用了底層的資源,例如 Linux 核心。
當上述兩者相遇,就有不直覺的事情產生了:當我們打包一些程式,裡面包含了 SystemD Service File,若我們希望可以在 Docker Container 裡面透過 systemd 的指令 systemctl 啟動程序的話,需要一些先決條件跟額外處置才行。

2018年8月17日 星期五

偷跑篇:EDB11新的小功能 — PRAGMA AUTONOMOUS TRANSACTION

關聯式資料庫有交易的概念,確保多用戶進行資料的查詢/異動有一個規範。有一些 Oracle 用戶會使用到更進階的交易,叫做 Autonomous Transaction,能夠從當前交易中「再」分支的一個交易。
通常聽到這功能的用途,是有一些作業,需要避免會被當前作業的成敗所影響,最常見的就是額外的 Log 紀錄。
這種功能在 PostgreSQL 裡面其實一直都從缺(可能是因為 PGSQL 社群上開發的人都偏好扁平式的系統設計&規劃?),但是在一些習慣 Oracle 的用戶來說,已經有一些既定的規範,非得使用這種功能才行。
之前已經有一次筆記,演練這個功能的 Workaround 手法,不過現在(2018 年 8 月),下一版的 EDB Postgres 企業版 v11 總算補上了這個「Oracle 相容」功能~

2018年8月6日 星期一

PGSQL內建加密模組—pgcrypto 練習

Postgres 裡面有很豐富的資料加密函數可以使用,叫做 pgcrypto 模組,可以用來實作資料加密的規劃。
pgcrypto 模組支援資料單向的 hash 處理,摻鹽巴算 hash,加密碼算 hash,GnuPG 的金鑰整合等等功能。

這裡作一個相關的使用練習。

2018年7月10日 星期二

沒有 Primary Key 或 Unique Key 的 PGSQL 表格,怎麼去除重複的資料

有時候可能某些表格沒有建立 Primary Key 或 Unique Key(真糟糕~),這時候可能有完全重複的資料,這時候要怎麼抓出來?或是只保留一筆?

2018年6月13日 星期三

在 CentOS7 簡單裝 JupyterHub — 使用 Software Collections

JupyterHub 是多人登入版的 Python Jupyter Notebook,讓多人可以連線使用~
由於 JupyterHub 還沒有提供 RPM 安裝檔,安裝之後還有一點點帳號上的眉角,所以這裡紀錄一下安裝方式。

2018年6月12日 星期二

PGSQL 9.6 與 PGSQL 10 的 pg_basebackup 功能差異之一

PostgreSQL 的 pg_basebackup 是資料庫全備份的工具。在這個指令出現之前,通常是自己呼叫 SELECT pg_start_backup() 與 SELECT pg_stop_backup(),搭配各自備份的功能(tarball,rsync,上磁帶指令等等),分別備份資料庫的 $PGDATA 以及 WAL 目錄內容(PGSQL 9.x 的 $PGDATA/pg_xlog/,或是 PGSQL 10 的 $PGDATA/pg_wal/)。在 PGSQL 9.1 之後,把這過程打包成 pg_basebackup 指令,簡化備份過程(讓人變懶惰??)這指令的功能也隨著版本演進而越加豐富齊全。

最近在使用上,發現一個使用細節的改進,在 PGSQL 10 上是一個重要的改進~

2018年5月15日 星期二

在 Slackware 14.2 裡面下載 LXC Image

類似 Docker 但不同設計目的的 LXC,也有一個小小的 Image Repository,以及相對應的工具叫做 LXD,也可以提供使用者拉一些其他 Linix DIstribution 的 Container。這裡便簡單的紀錄一下在 Slackware 裡面的 LXC 拉取映像檔的方式。

2018年5月8日 星期二

EDB 功能 - EDB*Loader 工具的簡單範例

相仿 Oracle 的 SQL*Loader 工具,是EDB 用來載入大筆資料的工具。
設置方式幾乎與 SQL*Loader 一樣,一樣是設置 Control File,藉此載入 csv 資料進資料庫。
以下將在 EDB 以及 Oracle XE 使用一樣的 Control File 以及資料,對照 Loader 的使用指令。

2018年4月30日 星期一

Postgres 10 的 Logical Replication 操作筆記

在 PGSQL 10 引進了一個重要的新功能,透過 WAL 進行的資料表層級的同步功能。這個功能可以
在 PGSQL 10 之後的版本之間直接跨版本同步資料,或是用 pglogical以向下同步
跨作業系統平台間(Windows,Linux,IBM PowerLinux LE,Mac,32/64 位元)同步資料
同步指定表格資料

原本在 PGSQL 提供的相類似方案,是基於 Trigger 的 Slony,或是 PGSQL9.4 之後的 pglogical 模組,以及 EnterpriseDB 的 Replication Server。現在內建在資料庫裡面,除了 Streaming Replication 之外,還支援這個新功能,增加配置的彈性,簡化配置的作業。

2018年4月17日 星期二

EDB 的 Postgres 監控平台 PEM Server v7.2 — 試用安裝筆記

這篇是 EDB 公司的 Postgres 監控平台 — Postgres Enterprise Manager v7 的試用安裝筆記。提供需要評估的用戶參考。

2018年4月2日 星期一

EDB Postgres 10 企業版裡面的 Partitioned Table 系統表

在 PostgreSQL 10 引進了原生的 Partitioned Table 語法,EDB 的企業版在很久之前就有 Tartitioned Table。各自也都有相關的系統表。那麼,這些系統表有相互含括嗎?
這裡紀錄一下這個問題,然後順便偷懶,當作新的 Partitioned Table 語法功能筆記~

2018年3月27日 星期二

查看 PGSQL10 每個 Session 的 CPU/Mem 用量

最近被問到 Postgres 如何查看吃比較多 CPU 的 Session。不過目前 Postgres 在內建狀態這塊還在努力的樣子...因此找了一下替代方案,發現 EnterpriseDB 曾經有過相關教學。

2018年3月2日 星期五

docker 簡易操作體驗 - 拉映像檔、登入設定、打包設定結果~~

Docker 這東西太紅了,隨便都是相關手冊,這裡就在 Slackware 上面照著試一下,然後作個簡易紀錄。
這裡只有試著把 docker container 單純當作作業系統的操作,如果要完整的學習,可以到 Play with Docker Classroom 進行線上互動式教學~

2018年2月7日 星期三

PostgreSQL 底下的 PL/Python 使用注意事項之一

以下是先前確認 PL/Python 功能時,發現的地雷。在此紀錄一下~

2018年1月23日 星期二

Oracle 的樞紐表 pivot 運算子轉換成 PGSQL 的 crosstab() 語句

遇到需要替換 Oracle 的 pivot() 運算子,換成 PGSQL 的 tablefunc 模組的 crosstab() 的需要,這裡紀錄一下。

2018年1月10日 星期三

PostgreSQL 的保留字(Keywords)有哪些?

替換資料庫的時候,有時會發生原先的程式誤觸新的資料庫的保留字。
從其他關聯式資料庫,換到 PostgreSQL 時,可能會有欄位名稱恰恰用到了保留字。
以下是列出表留字的方式,跟處理方式,作一個紀錄。