Postgresql
如何通過 psql i 命令將參數傳遞給 sql 腳本
psql
\i
命令能夠執行給定的 SQL 腳本,但我需要一種將參數傳遞給腳本的方法。範例:假設您有這個簡單的腳本
select * from :table LIMIT 1;
我試過了
my_db=> \i my-script.sql -v table="core.product"
但收到此錯誤
psql:my-script.sql:1: ERROR: syntax error at or near ":" LINE 1: select * from :table LIMIT 1; ^ \i: extra argument "-v" ignored \i: extra argument "table="core.product"" ignored
我知道在終端上執行它會起作用,但我已經在 psql 裡面了。
psql -v table="core.product" -f my-script.sql
用於
\set
在 psql 中設置變數。在此處閱讀手冊中的 SQL 插值:
理想情況下,您的腳本應為:
SELECT * FROM :"my_schema".:"my_table" LIMIT 1;
架構和表分別雙引號,用於標識符插值。然後在 psql 中設置模式和表,不帶引號,例如:
my_db=>\set my_schema core my_db=>\set my_table product
只是裸露的、區分大小寫的名稱。最後,執行:
my_db=>\i my-script.sql
這樣,腳本就可以安全地防止 SQL 注入。