Postgresql
如何根據查詢結果對錶創建註釋
我想使用查詢結果作為對錶格的評論。我在 psql 中嘗試過:
\set list select count(*) from department.master_data COMMENT ON TABLE department.master_data IS :list;
但我得到了這個錯誤:
it=> \set list select count(*) from department.master_data it=> COMMENT ON TABLE department.master_data IS :list; ERROR: syntax error at or near "selectcount" LINE 1: ...ABLE department.master_data IS selectcoun...
雖然我不確定您想要實現什麼(為什麼將計數儲存為評論是有意義的,特別是如果您的表將獲得新行(或失去一些到
DELETE
s)),但這裡是您的問題是什麼以及如何你可以解決它。首先,檢查你
psql
認為變數中有什麼:\echo :list selectcount(*)fromdepartment.master_data
顯然不是您查詢的結果。要儲存它,您必須使用
\gset
:> SELECT count(*) AS master_data_count FROM department.master_data; master_data_count ─────────────────── 1234567890 (1 row) > \gset > \echo :master_data_count 1234567890
如果你現在嘗試設置表描述,你會得到另一個錯誤:
ERROR: syntax error at or near "1234567890" LINE 1: ...ABLE department.master_data IS selectcoun...
這是因為註釋必須是(引號分隔的)文本。要從變數中取出一個,您有兩種選擇。
psql
一種是使用(使用您濫用設置的相同功能)向變數添加轉義引號:list
:> \set master_data_count '\'' :master_data_count '\'' > \echo :master_data_count '1234567890'
或者您可以在查詢中添加已經引用的報價,因此
SELECT count(*)
變成SELECT $$'$$ || count(*) || $$'$$
(我在上面使用美元報價來避免輸入類似的東西
''''
。)您已經可以將結果用作註釋,因為它包含必要的引號。
在 psql 中使用
\gset
將查詢結果儲存在局部變數中 - 就像 dezso 已經建議的那樣。更短一點,\gset
可以將分號 (;
) 替換為查詢終止符:test=# SELECT count(*) AS list FROM department.master_data \gset
然後,要獲得單引號字元串(任何包含的單引號會自動安全轉義),請使用以下語法變體引用 psql 變數:
:'list'
. 注意冒號後面的括起來!''
test=# COMMENT ON TABLE department.master_data IS :'list';
閱讀手冊中的 SQL 插值。
有關的: