作 PostgreSQL 功能驗證時,可能會需要設定臨時的變數使用。那麼在 psql 界面下要怎麼宣告變數?
其實還蠻簡單的~
要宣告變數,使用的是 psql 的 Meta-Command,\set 與 \unset 指令進行設置。
宣告上,可以分成三種模式:
1. 物件名稱的變數
edb=# \d relation 清單 架構模式 | 名稱 | 型別 | 擁有者 ----------+------------+--------+-------------- public | dept | table | enterprisedb public | emp | table | enterprisedb public | jobhist | table | enterprisedb public | next_empno | 序列數 | enterprisedb public | salesemp | view | enterprisedb (5 筆資料列) edb=# \set myvar 'dept' edb=# SELECT * FROM :myvar; deptno | dname | loc --------+------------+---------- 10 | ACCOUNTING | NEW YORK 20 | RESEARCH | DALLAS 30 | SALES | CHICAGO 40 | OPERATIONS | BOSTON (4 筆資料列) edb=# \unset myvar edb=# SELECT * FROM :myvar; ERROR: syntax error at or near ":" LINE 1: SELECT * FROM :myvar; ^
2. 資料內容的變數
edb=# \d relation 清單 架構模式 | 名稱 | 型別 | 擁有者 ----------+------------+--------+-------------- public | dept | table | enterprisedb public | emp | table | enterprisedb public | jobhist | table | enterprisedb public | next_empno | 序列數 | enterprisedb public | salesemp | view | enterprisedb (5 筆資料列) edb=# \set myvar 'SALES' edb=# SELECT * FROM dept WHERE dname = :'myvar'; deptno | dname | loc --------+-------+--------- 30 | SALES | CHICAGO (1 筆資料列) edb=# \unset myvar edb=# SELECT * FROM dept WHERE dname = :'myvar'; ERROR: syntax error at or near ":" LINE 1: SELECT * FROM dept WHERE dname = :'myvar'; ^
3. 雙引號物件名稱的變數:就是固定大小寫的意思。此範例中可以發現要求固定大寫的表格名稱會找不到。
edb=# \d
relation 清單
架構模式 | 名稱 | 型別 | 擁有者
----------+------------+--------+--------------
public | dept | table | enterprisedb
public | emp | table | enterprisedb
public | jobhist | table | enterprisedb
public | next_empno | 序列數 | enterprisedb
public | salesemp | view | enterprisedb
(5 筆資料列)
edb=# \set myvar 'dept'
edb=# SELECT * FROM :"myvar";
ERROR: relation "DEPT" does not exist
LINE 1: SELECT * FROM "DEPT";
^
edb=# \unset myvar
最後提醒的是,這在 GUI 界面底下(也就是 pgAdmin3、pgAdmin4,或是 EDB 企業版的 PEM Client,還是其他的 GUI,例如 Postgresql Studio、Postage 或是其他云云 . . .)沒有這種功能,切記切記~
參考資料:
沒有留言:
張貼留言