Postgresql

如何通過 psql i 命令將參數傳遞給 sql 腳本

  • September 28, 2021

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 注入。

引用自:https://dba.stackexchange.com/questions/300276