[PostgreSQL] 用 pgsanity 檢查 .sql 檔案是否有語法錯誤

[PostgreSQL] 用 pgsanity 檢查 .sql 檔案是否有語法錯誤

最近專案遇到了一個問題,有一個 SQL 檔案在修改後,

沒辦法被 psql 指令拿來執行了~

下面是一個 SQL 檔案的例子,看得出來問題在哪嗎?

CREATE TABLE tbl_task
(
ID BIGSERIAL PRIMARY KEY NOT NULL,
SHA1 CHAR(40) NOT NULL,
);

 

上面那個 SQL 檔案有個語法錯誤,

在 SHA1 那一行的 NOT NULL 後面,是不能有逗號 “,” 的!

老實說這種問題實在很難用人眼注意到…

當然我們直接用 psql 一跑就可以發現問題,

但有沒有在不執行 SQL 指令的狀況下,就能得知語法問題呢?

 

在網路上找到了 pgsanity 這個專案,它可以檢查 SQL 檔案是否符合 PostgreSQL 的語法~

它的運作方式是將 SQL 檔案轉成內含 SQL 指令的 C 檔案,

再呼叫 PostgreSQL 內附的 ecpg 指令來檢查有沒有語法錯誤。

來看看怎麼用它吧~

 

1. 安裝 pgsanity

用 pip 直接安裝:

pip install pgsanity

 

2. 安裝 PostgreSQL

因為 ecpg 是含在 PostgreSQL 套件裡面,因此我們得安裝 PostgreSQL 才行~

在 Mac 上可以直接用 Homebrew 安裝:

brew install postgresql

 

在 CentOS 上面的話,要安裝 postgresql-devel:

sudo yum install postgresql-devel

 

3. 使用 pgsanity 檢查 SQL 檔案

用 pgsanity <file> 來檢查 SQL 檔案,

有問題的話,就會顯示出第一個語法錯誤的地方,例如:

testuser@localhost ~ $ pgsanity create_tables.sql
line 6: ERROR: syntax error at or near ")"

 

當我們將語法錯誤修正之後,就不會有任何輸出了:

testuser@localhost ~ $ pgsanity create_tables.sql
testuser@localhost ~ $ 

 

但要注意的是,pgsanity 並不是萬能的,

它只能檢查 SQL 語法是否正常,但 PostgreSQL 特有的指令是不行的…

舉例來說,下面的指令在 SQL 檔案裡,是可以被 psql 執行的:

\echo Hello
select * from data;

 

但 pgsanity 會回報語法錯誤:

testuser@localhost ~ $ pgsanity test.sql
line 1: ERROR: syntax error at or near "\"

 

參考資料:postgresql syntax check without running the query

 

(本頁面已被瀏覽過 603 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料