作 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 或是其他云云 . . .)沒有這種功能,切記切記~
參考資料:
沒有留言:
張貼留言