這裡接續上次設定,繼續使 Container 可以連上外部網路。
MathJax
MathJax-2
MathJax-3
Google Code Prettify
置頂入手筆記
EnterproseDB Quickstart — 快速入門筆記
由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:
2017年12月25日 星期一
LinuX Container on Slackware 14.2 練習筆記 - 設定網路
上次設定 LXC Container 沒有設定上網,所以目前的 Container 是沒辦法連外的。
這裡接續上次設定,繼續使 Container 可以連上外部網路。
這裡接續上次設定,繼續使 Container 可以連上外部網路。
2017年12月21日 星期四
在 Postgres 9.6 psql 裡面執行大量「拼裝」產生的 SQL 字串的小技巧
在使用關聯式資料庫,有一種奇怪的技巧:就是
這種用法通常在一次大量變動資料庫物件屬性時還蠻常見的,例如一次變動滿足條件的表格欄位型態。或是一次數所有「非系統表」的表格資料筆數。
在 PGSQL 9.6 裡面,提供了一個簡化的方式來滿足這個願望的 Meta-Command,\gexec。\gexec 用來把一段 SQL 的匯出結果,轉而當成 SQL 來執行,前提當然是 SQL 匯出結果要自己使用字串串接的方式,安排成可以執行的合法 SQL 指令~
以下列出一兩個範例。
- 查詢系統表
- 拼裝出需要的 SQL「指令」匯出到文字檔裡面
- 再把文字檔內容用來當成 SQL Script 執行。
這種用法通常在一次大量變動資料庫物件屬性時還蠻常見的,例如一次變動滿足條件的表格欄位型態。或是一次數所有「非系統表」的表格資料筆數。
在 PGSQL 9.6 裡面,提供了一個簡化的方式來滿足這個願望的 Meta-Command,\gexec。\gexec 用來把一段 SQL 的匯出結果,轉而當成 SQL 來執行,前提當然是 SQL 匯出結果要自己使用字串串接的方式,安排成可以執行的合法 SQL 指令~
以下列出一兩個範例。
2017年12月18日 星期一
Slackware 14.2 (Current) 上面安裝 docker-compose(2017 年10月)
docker-compose 是一個 Python 模組,可以完全用 pip 或是 setuptool 進行安裝。
而 Slackware 另外提供套件模式,不過相依性龐雜.......跟上一篇安裝 docker 筆記一樣,一樣要從 Slackbuilds 取得。
而 Slackware 另外提供套件模式,不過相依性龐雜.......跟上一篇安裝 docker 筆記一樣,一樣要從 Slackbuilds 取得。
2017年12月6日 星期三
Slackware 14.2 (Current) 上面安裝 Docker(2017 年10月)
要以 Slackware 作為 Docker 的 Host OS,需要從原始碼編譯成安裝套件,而編譯的 Script 位在 Slackbuilds.org 裡面維護。Docker 本身又是一個版本週期快速的程式(目前是每月一版,每季一個穩定版,社群版支援週期也不長)
安裝的話,可以使用 sbopkg 工具,就可以直接從 Slackbuilds.org 抓編譯 Docker Community Edition 的 Script 處理,是 Slackware 上面常見的安裝套件方式。
安裝的話,可以使用 sbopkg 工具,就可以直接從 Slackbuilds.org 抓編譯 Docker Community Edition 的 Script 處理,是 Slackware 上面常見的安裝套件方式。
2017年12月4日 星期一
PostGIS 入門簡介
PostGIS 是一個資料庫的地理圖資模組。這個模組能讓 PostgreSQL 搖身一遍,成為一個地理圖資資料庫(Spatial Database)。裡面提供豐富的地理資料操作功能,可以說是目前市面上數一數二的地理圖資資料庫。而許多人會使用 PostgreSQL 的理由,便是因為 PostGIS 這個工具的關係。
這裡整理一點有關的筆記,希望能對你有幫助~
(本篇落落長,慎入!)
這裡整理一點有關的筆記,希望能對你有幫助~
(本篇落落長,慎入!)
2017年11月20日 星期一
Oracle MERGE INTO 語法在 Postgres 的改寫方式
在 SQL 語言裡面,資料的輸入(INSERT)和更新(UPDATE)是不一樣的作業,要是對非重複欄位再輸入會發生失敗,整個交易作業都會取消。
所謂的 Upsert 功能用來進行資料衝突判斷,決定資料要新增還是更新,簡單的避開上述困擾。在 Postgres 9.5 之後,引入了 Upsert 功能,INSERT . . . ON CONFLICT DO . . .,可以達成上述功能。PGSQL 的 Upsert 把資料先嘗試以 INSERT 塞入表格,發生衝突時才進行更新或略過資料。
而在 Oracle 資料庫的 Merge 功能,與 Upsert 有一點點小差別:MERGE INTO 是一次以多筆資料塞入表格。資料併入表格的方法以輸入或更新二選一的方式,而非先進行輸入失敗才更新
這裡紀錄 Oracle MERGE INTO 轉換成 PGSQL INSERT ON CONFLICT 的筆記。
所謂的 Upsert 功能用來進行資料衝突判斷,決定資料要新增還是更新,簡單的避開上述困擾。在 Postgres 9.5 之後,引入了 Upsert 功能,INSERT . . . ON CONFLICT DO . . .,可以達成上述功能。PGSQL 的 Upsert 把資料先嘗試以 INSERT 塞入表格,發生衝突時才進行更新或略過資料。
而在 Oracle 資料庫的 Merge 功能,與 Upsert 有一點點小差別:MERGE INTO 是一次以多筆資料塞入表格。資料併入表格的方法以輸入或更新二選一的方式,而非先進行輸入失敗才更新
這裡紀錄 Oracle MERGE INTO 轉換成 PGSQL INSERT ON CONFLICT 的筆記。
2017年11月17日 星期五
PostgreSQL 裡面的時區設定使用筆記
PostgreSQL 的時區,內建預設是 GMT。不過時區會在 initdb 時,根據作業系統設定值決定,然後設定在 $PGDATA/postgesql.conf 裡面的 GUC 參數 timezone 上。而可以設置的時區資訊則紀錄在 pg_timezone_names 這個系統表裡面。
下面在 CentOS 底下,在 OS 和 DB 中,列舉這些資訊出來作比較
下面在 CentOS 底下,在 OS 和 DB 中,列舉這些資訊出來作比較
2017年11月13日 星期一
LinuX Container on Slackware 14.2 練習筆記 - 建立 Container
這一陣子,Docker Container 很紅,好像是因為比起跑 Virtual Machine 吃的資源更少一些。又聽說 Docker 原先是 Linux Container 衍生的。再聽說後來 Docker 不只支援 Liunx Container(看到好像主要有 libcontainer, LXC, OpenVZ, systemd-nspawn, libvirt-lxc, libvirt-sandbox, qemu/kvm, BSD Jails, Solaris Zones, chroot 這一堆詞)。所以跟跟風,也來看看怎麼用 Container~
Container 功能,我最先知道的就是 Linux Container(LXC)。目前對 LXC的認識不多,我目前假裝理解成是 chroot 的衍生物,Docker 前驅物。
以前曾經用過 chroot 把 MBR 被蓋掉的 Slackware Linux 給弄回來,大概知道 chroot 的用途。
現在練習一下 Linux Container,操作後的感想:有一點把 Linux Container 當成是 chroot 來看待。
Container 功能,我最先知道的就是 Linux Container(LXC)。目前對 LXC的認識不多,我目前假裝理解成是 chroot 的衍生物,Docker 前驅物。
以前曾經用過 chroot 把 MBR 被蓋掉的 Slackware Linux 給弄回來,大概知道 chroot 的用途。
現在練習一下 Linux Container,操作後的感想:有一點把 Linux Container 當成是 chroot 來看待。
2017年10月23日 星期一
在 PostgreSQL 9.6 裡面實作 Autonomous Transaction
所謂 Autonomous Transaction,指的是在一個資料庫的交易(Transaction)中,能夠再「分支」出另外一個獨立的交易。
這和子交易(Sub-Transaction)是不同的概念:子交易和上層的交易是巢狀的概念,仍然是單一個工作程序,在子交易中發生 Rollback,就對整個交易都會 Rollback;而 Autonomous Transaction 則是在呼叫之時,額外分支出另外一個交易執行,分之出去的交易活動成敗(Commit/Rollback)不會再影響目前的交易,兩者獨立開來。
在 Oracle 的 Stored Procedure 中,有一個 PRAGMA AUTONOMOUS_TRANSACTION 的修飾字,讓一個函數的運行,額外分支出一個交易。
不過到 Postgres 9.6 為止,都沒有「直接」支援這樣的功能,那在 Postgres 9.6 要如何做到呢?
這和子交易(Sub-Transaction)是不同的概念:子交易和上層的交易是巢狀的概念,仍然是單一個工作程序,在子交易中發生 Rollback,就對整個交易都會 Rollback;而 Autonomous Transaction 則是在呼叫之時,額外分支出另外一個交易執行,分之出去的交易活動成敗(Commit/Rollback)不會再影響目前的交易,兩者獨立開來。
在 Oracle 的 Stored Procedure 中,有一個 PRAGMA AUTONOMOUS_TRANSACTION 的修飾字,讓一個函數的運行,額外分支出一個交易。
不過到 Postgres 9.6 為止,都沒有「直接」支援這樣的功能,那在 Postgres 9.6 要如何做到呢?
2017年10月6日 星期五
找出 PGSQL 資料庫裡面,隱含被移除欄位的表格
在 Postgres 資料庫裡面,表格欄位沒有被其他表格或是 View 參照(相依)的話,可以直接用 ALTER TABLE 作欄位的異動。(有被參照的話,需要先解除這些 Regerence 才能動作)
有時候,可能有移除欄位的需要。但是移除欄位時,明明有這多的資料,移除欄位怎麼快速會完成?
有時候,可能有移除欄位的需要。但是移除欄位時,明明有這多的資料,移除欄位怎麼快速會完成?
2017年9月19日 星期二
在 Postgres 透過 SET ROLE 實現類似 sudoer 的功能
Postgres 裡面的有絕對控制權的帳戶權限叫做 Superuser。一般在 Postgres 預設狀況下,除非特別指定,執行 initdb 的作業系統帳戶會擁有因此產生的 Postgres 資料庫服務(Postgres instance),並且預設資料庫內的同名帳戶是資料庫的 Superuser。
不過通常都以預設的配置,產生出以 postgres(企業版為 enterprisedb)為 Superuser 的資料庫服務。
除了預設的 Superuser 帳戶之外,Superuser 的權限也可以手動賦予其他新的資料庫帳戶。
更進一步,甚至可以類似 Linux 底下的 sudo 功能,使一個一般帳戶加入一個「Superuser 群組」:平常這些帳戶不能執行 Superuser 權限的動作;但在必要時,便能類似 sudo 一樣,切換身份,暫時成為 Superuser。
那要怎麼設定呢?
不過通常都以預設的配置,產生出以 postgres(企業版為 enterprisedb)為 Superuser 的資料庫服務。
除了預設的 Superuser 帳戶之外,Superuser 的權限也可以手動賦予其他新的資料庫帳戶。
更進一步,甚至可以類似 Linux 底下的 sudo 功能,使一個一般帳戶加入一個「Superuser 群組」:平常這些帳戶不能執行 Superuser 權限的動作;但在必要時,便能類似 sudo 一樣,切換身份,暫時成為 Superuser。
那要怎麼設定呢?
2017年9月15日 星期五
一個 PL/R 的使用範例 — 產生樞紐表
2017年9月7日 星期四
在CentOS7 + EDB9.6 上安裝 PL/R(R 語言的 Stored Procedure)
這次安裝,裝在 Google Cloud 的 CentOS7上,裡面裝的是 EDB 的 Postgres 9.6 企業版,然而以下安裝也適用在其他 RHEL/Fedora 與其他 PostgreSQL distribution 上
2017年9月1日 星期五
PostgreSQL 的 Materialized View 與 EDB Replication Server ver 6.1 的比較
這篇主要是紀錄一下,PostgreSQL 底下的 Materialized View 與 EnterpriseDB 的週邊產品 EDB Replication Server v6.1 的相關比較資訊。如果要使用範例,直接參考使用手冊即可。
2017年8月29日 星期二
變更 Postgres 9.x 列舉(enum)資料型態的標籤值
Postgres 的 enum 資料型態類似 C 語言裡面的 enum,可以用數值指稱一組標籤,可以節省資料存放的空間。資料存取上,與一般字串欄位沒什麼不同。並且比起直接存放一些固定選項的字串的欄位,使用 enum 還可以建立比較快速的 Index,直接放字串的話,在 PGSQL 只能作次佳的索引。
不過有時候會希望調整標籤的品項,要怎麼樣作調整?
不過有時候會希望調整標籤的品項,要怎麼樣作調整?
2017年8月7日 星期一
用 Postgres 的 Procedure Language 把指令查詢結果匯出到文字檔裡面,以及 Security Label 的使用
有時候資料或查詢結果需要落檔:在 psql 裡面,大家都可以用 \copy 這個 Meta-Command 把查詢結果匯出(但好像不多人使用 psql 就是了),或是手動用 GUI 界面(pgAdmin 或是 Libreoffice Base 或是其他 . . .),把資料用手拉出來。
那如果要用 SQL + Procedural Language 程式的話呢?
那如果要用 SQL + Procedural Language 程式的話呢?
2017年8月2日 星期三
EDB Backup and Recovery 2.0 增量備份管理功能操作筆記
繼先前 EnterpriseDB 公司的 Backup and Recovery Tool v1.1(EDB-BaRT)之後,近日推出 2.0 版(之前的筆記在這)。在 2.0 版中,除了既有的 Base Backup 之外,新增了管理 Incremental Backup 的功能。如此除了使用 WAL 手動作 Point-in-Time Recovery,又多了一種可行選項可以用。
2017年7月25日 星期二
在 PostgreSQL 產生累積次數分配圖表的 SQL 語法
一般敘述性統計,常見到兩種圖,次數分佈圖和累計次數分佈圖。繼上次的次數分佈的 SQL 筆記之後,這次換成累計次數分佈(Cumulative Frequency Distribution Chart)了。
2017年7月23日 星期日
在 Oracle XE 設定連線到 EDB Postgres 的 ODBC DBLink
很多人好像很「想要」從 Oracle 資料庫用 DBLink 連到其他異質資料庫,例如 EDB 的 PostgreSQL 企業版。雖然以前已經有幾篇很清楚的文章了,但是過程中還是會遇到諸多麻煩 ... 這裡還是把坑踩一下好了...
2017年7月21日 星期五
PostgreSQL 9.5 的 JSON 格式操作筆記
在使用上,能達到以下事項:
- 欄位能用 JSON 資料型態,以及內容的操作
- 欄位能用 JSONB 資料型態,以及內容的操作 --- 對應到 MongoDB 的 BSON
- 一般表格以 JSON 格式匯出資料庫
- JSON 檔匯入資料庫的普通表格
- 對於 MongoDB 提供的 Foreign Data Wrapper 套件,mongo_fdw
2017年7月10日 星期一
在 PostgreSQL 產生次數分配圖表的 SQL 語法
在 Excel 或 Libreoffice Calc 中,可以用資料畫次數分配長條圖(Frequency Distribution Chart);那在 PostgreSQL 要怎麼用 SQL 語法達成?
2017年7月4日 星期二
在 PostgreSQL 裡面產生樞紐分析表
樞紐分析表(Pivot Table)是什麼?在 Excel 裡面有提供這樣的東西,看似是被廣泛的使用的基本工具。
依照維基百科的說明,樞紐分析表是一種用來呈現資料性質總結(如計數,加總,平均或其他 Aggregation )的工具。
而一個樞紐表包含三個部份:
對應到關聯式表格的結構。樞紐表把兩欄用「品項」當成資料內容的關聯式表格欄位,挑出相異品項的清單,當作樞紐表的 X/Y 欄位陳列的「標籤」(例如,可以用 enum 型態來列舉資料內容的欄位,或是紀錄每日的日期/月份的欄位,都可以當成樞紐表 X/Y 軸的標籤);而中間的內容,就是對照 (X, Y) 值當成條件的 Aggregation 結果。
要從關聯式表格產生樞紐分析表,便要組織 SQL 查詢,呈現結果,再使用樞紐表組織工具處理
以上的關係搞清楚之後,樞紐表能不能用 PostgreSQL 資料庫的 SQL 語法完成?
依照維基百科的說明,樞紐分析表是一種用來呈現資料性質總結(如計數,加總,平均或其他 Aggregation )的工具。
而一個樞紐表包含三個部份:
- 垂直欄位:這個欄位中,包含相異的品項。作為樞紐表的 Y 軸
- 水平欄位:和垂直欄位一樣,也包含相異的品項,但內容會挑跟垂直欄位不相同的項目來用。作為樞紐表的 X 軸
- X/Y 張開的表格之間:為要呈現的總結資訊。也就是,固定 (X, Y) 條件下,所得的 Aggregation 資訊(例如,固定 (X,Y) 條件後的資料筆數,或是固定 (X, Y) 條件下,其他欄位資料的平均值)
- (選擇性)對 X 軸 / Y 軸作小計
對應到關聯式表格的結構。樞紐表把兩欄用「品項」當成資料內容的關聯式表格欄位,挑出相異品項的清單,當作樞紐表的 X/Y 欄位陳列的「標籤」(例如,可以用 enum 型態來列舉資料內容的欄位,或是紀錄每日的日期/月份的欄位,都可以當成樞紐表 X/Y 軸的標籤);而中間的內容,就是對照 (X, Y) 值當成條件的 Aggregation 結果。
要從關聯式表格產生樞紐分析表,便要組織 SQL 查詢,呈現結果,再使用樞紐表組織工具處理
- 準備作為 X 軸的欄位資料
- 準備作為 Y 軸的欄位資料
- 準備用來作總結的資料
以上的關係搞清楚之後,樞紐表能不能用 PostgreSQL 資料庫的 SQL 語法完成?
2017年7月3日 星期一
cygwin 裡面安裝 python3-matplotlib 和 python3-scipy
在 Windows 裡面有一款類比一般 GNU/Linux 裡面 Shell 與相關工具的程式,叫做 Cygwin,是由 Red Hat 維護的。儘管 Windows 10 有提供 Linux Shell(Windows Subsystem for Linux),聽說可以裝 Debian 或 Ubuntu 的套件,不過我還是習慣用 Cygwin~(其實,我更習慣 Slackware~)
Cygwin 裡面已經有提供 OpenBLAS 與針對 OpenBLAS 編譯的 LAPACK 函式庫,可以用 CPU 處理多執行緒數值線性代數運算,以及針對這兩個東西編譯的 Python2/Python3 是值運算模組 Numpy。用這些就可以作數值運算了。
不過一般都會再裝 Scipy 和 Matplotlib 來用;要在 Cygwin 裡面用 Matplotlib 與 Scipy,就得用 setuptools 的 easy_install 或 pip 來裝;但是安裝過程有一些套件相依性要處理,也是有一點麻煩步驟的。
Cygwin 裡面已經有提供 OpenBLAS 與針對 OpenBLAS 編譯的 LAPACK 函式庫,可以用 CPU 處理多執行緒數值線性代數運算,以及針對這兩個東西編譯的 Python2/Python3 是值運算模組 Numpy。用這些就可以作數值運算了。
不過一般都會再裝 Scipy 和 Matplotlib 來用;要在 Cygwin 裡面用 Matplotlib 與 Scipy,就得用 setuptools 的 easy_install 或 pip 來裝;但是安裝過程有一些套件相依性要處理,也是有一點麻煩步驟的。
2017年6月14日 星期三
PostgreSQL 9.x 原生的 Partitioned Table 設置
第十版的 Postgres 將引進原生的 Partitioned Table 語法。所以要快點把舊的 Partitioned Table 設置筆記快快貼出來~~
當然,這些語法在 PGSQL 10 也還是能用的!此外,由於 PGSQL 10 雖然在 postgres_fdw 提供 Aggregation Pushdown,但針對 Partitioned Table 的外部小資料表(Foreign Partitions)還沒有 Aggregation Pushdown 的執行計畫,因此像這樣 DIY 的 Partitioned Table 在 PGSQL 10 還是有他的一點用途的~
最後提醒一下,EDB 的 Postgres 企業版也有針對 Oracle 相容的 Partitioned Table 語法;就目前(2017 年六月)的資料看來,企業版還是功能還是比較多一些。
當然,這些語法在 PGSQL 10 也還是能用的!此外,由於 PGSQL 10 雖然在 postgres_fdw 提供 Aggregation Pushdown,但針對 Partitioned Table 的外部小資料表(Foreign Partitions)還沒有 Aggregation Pushdown 的執行計畫,因此像這樣 DIY 的 Partitioned Table 在 PGSQL 10 還是有他的一點用途的~
最後提醒一下,EDB 的 Postgres 企業版也有針對 Oracle 相容的 Partitioned Table 語法;就目前(2017 年六月)的資料看來,企業版還是功能還是比較多一些。
2017年6月1日 星期四
在 Postgres 自訂 Aggregation 函數 — 把多筆字串併成同一列
Aggregation 函數,指的是一個或多個欄位的把多筆資料一起處理,映射成一個值的函數,例如加總 SUM() 或平均 AVG() 等函數。
除了內建的 Aggregation 之外,Postgres 提供自訂 Aggregation 的方式,可以自訂自己需要的條件的 Aggregation。
除了內建的 Aggregation 之外,Postgres 提供自訂 Aggregation 的方式,可以自訂自己需要的條件的 Aggregation。
2017年5月7日 星期日
在 Postgres 裡面的用 SELECT Query 回傳值更新多個欄位
這裡用 EDB 的範例資料(2.1.1 Sample Database | Database Compatibility for Oracle® Developer’s Guide for EDB Postgres™ Advanced Server 9.6),紀錄如在 Postgres 裡面用一個 SELECT 的回傳的一筆結果,用來更新其他地方的資料。
2017年5月2日 星期二
2017年4月10日 星期一
停止卡住的 Postgres Session 的 SQL 指令
在 Postgres 遇到有奇怪的 Session 執行「好像」卡很久的 SQL 查詢指令,想要先把它停下來,再找人來罵一罵~,怎麼處理呢?
2017年4月4日 星期二
在 Postgres 把同一欄的資料,併成同一列的逗號分隔值呈現
雖然不清楚這種功能要作什麼,還是紀錄一下~
在 Oracle 資料庫裡面,要把同一欄位的不同筆資料,用逗號分隔的方式輸出,有以下兩種方法
(一) 用 XML 處理,比較像繞遠路
或是
(二) 用 listagg() 函數處理
上面這兩方式在 EDB 都還沒支援(截至 9.6),那應該如何處理?
在 Oracle 資料庫裡面,要把同一欄位的不同筆資料,用逗號分隔的方式輸出,有以下兩種方法
(一) 用 XML 處理,比較像繞遠路
SQL> select DEPARTMENT_ID, rtrim (xmlagg (xmlelement (e, FIRST_NAME || ',')).extract ('//text()'), ',') enames from EMPLOYEES group by DEPARTMENT_ID; DEPARTMENT_ID ------------- ENAMES -------------------------------------------------------------------------------- 10 Jennifer 20 Michael,Pat 30 Den,Karen,Guy,Sigal,Shelli,Alexander DEPARTMENT_ID ------------- ENAMES -------------------------------------------------------------------------------- 40 Susan 50 Matthew,Douglas,Donald,Kevin,Alana,Vance,Samuel,Britney,Sarah,Randall,Timothy,Jennifer,Kelly,Anthony,Julia,Alexis,Nandita,Girard,Martha,Jean,Winston,Peter,Randall,Curtis,Trenna,Joshua,John,Stephen,Renske,Hazel,Ki,Michael,Jason,TJ,James,Mozhe,Laura,Steven,James,Irene,Julia,Kevin,Shanta,Payam,Adam DEPARTMENT_ID ------------- ENAMES -------------------------------------------------------------------------------- 60 Alexander,Diana,Valli,David,Bruce 70 Hermann 80 John,Charles,Jack,Jonathon,Alyssa,Ellen,Sundita,Elizabeth,William,Tayler,Harrison,Lisa,Amit,Sundar,David,Mattea,Danielle,Clara,Sarath,Louise,Lindsey,Allan,Patri DEPARTMENT_ID ------------- ENAMES -------------------------------------------------------------------------------- ck,Janette,Oliver,Nanette,Christopher,Peter,David,Peter,Eleni,Gerald,Alberto,Karen 90 Steven,Lex,Neena 100 Nancy,Luis,Jose Manuel,Ismael,John,Daniel DEPARTMENT_ID ------------- ENAMES -------------------------------------------------------------------------------- 110 Shelley,William Kimberely 12 rows selected.
或是
(二) 用 listagg() 函數處理
SQL> SELECT DEPARTMENT_ID, listagg (FIRST_NAME, ',') WITHIN GROUP (ORDER BY FIRST_NAME) FIRST_NAME FROM EMPLOYEES GROUP BY DEPARTMENT_ID; DEPARTMENT_ID ------------- FIRST_NAME -------------------------------------------------------------------------------- 10 Jennifer 20 Michael,Pat 30 Alexander,Den,Guy,Karen,Shelli,Sigal DEPARTMENT_ID ------------- FIRST_NAME -------------------------------------------------------------------------------- 40 Susan 50 Adam,Alana,Alexis,Anthony,Britney,Curtis,Donald,Douglas,Girard,Hazel,Irene,James,James,Jason,Jean,Jennifer,John,Joshua,Julia,Julia,Kelly,Kevin,Kevin,Ki,Laura,Martha,Matthew,Michael,Mozhe,Nandita,Payam,Peter,Randall,Randall,Renske,Samuel,Sarah,Shanta,Stephen,Steven,TJ,Timothy,Trenna,Vance,Winston DEPARTMENT_ID ------------- FIRST_NAME -------------------------------------------------------------------------------- 60 Alexander,Bruce,David,Diana,Valli 70 Hermann 80 Alberto,Allan,Alyssa,Amit,Charles,Christopher,Clara,Danielle,David,David,Eleni,Elizabeth,Ellen,Gerald,Harrison,Jack,Janette,John,Jonathon,Karen,Lindsey,Lisa,Lou DEPARTMENT_ID ------------- FIRST_NAME -------------------------------------------------------------------------------- ise,Mattea,Nanette,Oliver,Patrick,Peter,Peter,Sarath,Sundar,Sundita,Tayler,William 90 Lex,Neena,Steven 100 Daniel,Ismael,John,Jose Manuel,Luis,Nancy DEPARTMENT_ID ------------- FIRST_NAME -------------------------------------------------------------------------------- 110 Shelley,William Kimberely 12 rows selected.
上面這兩方式在 EDB 都還沒支援(截至 9.6),那應該如何處理?
2017年3月10日 星期五
EnterproseDB Quickstart — 快速入門筆記
由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~
這篇筆記以資料庫安裝完畢後的快速使用為目標,基本紀錄登入使用的範例:
這篇筆記以資料庫安裝完畢後的快速使用為目標,基本紀錄登入使用的範例:
2017年3月7日 星期二
關於 PostgreSQL 裡面的密碼設置,與 EDB 企業版的 Password Profile
PostgreSQL 裡面設定密碼,密碼可以在 pg_shadow 這個系統 View 裡面查找,讓人感覺毛毛的。要怎樣才能不顯示明碼?
另外,EnterpriseDB 公司的 PostgreSQL 企業版在 9.5 版之後提供相當於 Oracle Password Profile 的功能,在這一併簡要說明。
另外,EnterpriseDB 公司的 PostgreSQL 企業版在 9.5 版之後提供相當於 Oracle Password Profile 的功能,在這一併簡要說明。
2017年2月27日 星期一
2017年2月7日 星期二
EDB 功能 - SQL/Protect
有時候,程式開發會使用參數方式組合出 SQL 指令,再往資料庫提請求。但是如果設計有疏忽,沒有對前端使用者的輸入條件進行完整的檢查,或是資料庫維護者不小心忘記限制好帳號的權限,可能會被有心人士設計出恰當的輸入條件,湊出能逾越一般該有權限所能進行的資料庫指令,這一般被稱作 SQL Injction 攻擊。
PostgreSQL 企業版提供了資料庫端的資料防護機制,SQL/Protect,能夠在資料庫端防止異常的 SQL,例如,對於資料需要受保護的資料表進行資料「全部」撈出來的 SQL SELECT 指令,或是怪怪的條件等等。
SQL/Protect 模組,當我們選定一些資料庫帳戶 User 或是帳戶群組 Group Role(以上兩者,在 PostgreSQL 裡面統稱為 Role ~)之後,能提供以下的功能:
- 被動紀錄、警示列管帳戶執行可疑活動
- 主動防止列管帳戶執行可疑活動
而「可疑活動」的界定,則是透過學習模式,預先將該帳號會進行的行為全部演練一次。例如,該帳號會對哪幾個表格輸入/查詢,查詢用到的 SQL 有哪一些型態,等等,全部都預先在 SQL/Protect 學習模式下跑一遍。建立起該帳號的行為比對模式(能存取的表格,能進行的作業,等等)。
學習完之後,只要該帳號發生紀錄過的行為模式「以外」,就會觸發 SQL/Protect 功能。因此這個工具的使用場景,便是針對提供 Application Server 使用帳號進行保護:這類帳號的行為固定,都是由已經開發好的程式進行活動;發生了一般模式之外的行徑,八成是被攻擊,就會受 SQL/Protect 所保護。
以下便紀錄基本的使用筆記:
2017年2月5日 星期日
Postgres 的 UNLOGGED Table 功能
PostgreSQL 資料庫會對交易活動產生 Write-Ahead Log Segment,以達成交易資料庫需要的各種要求。不過產生交易紀錄,在某些程度上,也是會佔用作業系統資源。PostgreSQL 提供了針對個別表格設置不要產生交易紀錄,稱作 Unlogged Table,這麼一來便可以在犧牲資料回復保障的狀況下,加速該表格的讀寫。
2017年2月4日 星期六
2017年1月25日 星期三
把 Pro*C 移到 EDB 9.5 企業版執行 — ECPGPlus 操作筆記
ECPG 是 Postgres 提供的 C 的開發輔助函式庫,提供所謂 Embedded SQL in C 的功能,類似 Oracle Pro*C 一樣的功能。兩者在使用上提供的 API 差異並不大,比較顯著的差別就在所使用的 SQL 指令,Postgres ECPG 和 Oracle Pro*C 步太能直接通用。
EnterpriseDB 則基於 Postgres ECPG 進一步提供移轉 Oracle Pro*C 到 Postgres 的額外功能,叫做 ECPGPlus。ECPGPlus 針對 EnterpriseDB 提供的企業版資料庫所具備的 Oracle 相容特性,提供相對應的 Embedded SQL in C 轉換,以便以最大幅度直接相容 Oracle Pro*C 的程式碼,達到系統移轉時降低改動幅度的目的。
以下自 EDB 的 PostgreSQL 企業版編譯一個 Oracle 的 Pro*C 程式碼,示範 ECPGPlus 的使用。
2017年1月4日 星期三
Logical Replication Slot on PostgreSQL 9.4 觀察 WAL 交易
這是在 PostgreSQL 9.4 推出的功能,稱作 Logical Decoding。也就是解析交易日誌的功能。發展此功能的目標是為了達成 Log-Based Replication 的功能,以便於日後達成 Master-Master Replication 或是負荷比較小的 Rowlevel Filtering Replication。直到 2016 年底,該功能還在發展當中(稱作 Bi-Directional replication,BDR)。不過這個功能的推出,也使的些許基於 PostgreSQL 的 Active-Active 實作方案推出,像是 EnterpriseDB 的 EDB Replication Server 的 Multi-Master Replication,或是社群的 pglogical 專案。
Logical Decoding 的使用,也是透過 Replication Slot 來進行,只是這裡的 Replication Slot 不同於在 Streaming Replication 使用的 (Physical) Replication Slot,而是另一類型,叫做 Logical Replication Slot。
以下用 9.4 版的 PostgreSQL作簡易的示範。看看 Logical Decoding 的功能。
訂閱:
文章 (Atom)