![](/img/trans.png)
[英]postgresql - error trying to pass a variable from command line to a sql script
[英]Postgresql command line variable usage in sql file
我正在使用 psql 命令將文件繞過參數調用為-v argument=value
。 在 SQL 文件中,參數需要用作字符串的一部分。 例如prefix_:argument_suffix
。 這是行不通的。 如果我將它用作prefix_:argument
它會起作用,但是當涉及到后綴時它不會。
這是用於在create database
語句中構建數據庫名稱。
有人可以幫忙嗎?
使用另一個變量,如:
nd@postgres=# \set argument 'aaa'
nd@postgres=# \set dbname 'foo_':argument'_bar'
nd@postgres=# select :'dbname';
┌─────────────┐
│ ?column? │
├─────────────┤
│ foo_aaa_bar │
└─────────────┘
nd@postgres=# create database :dbname;
CREATE DATABASE
nd@postgres=# \l
List of databases
┌─────────────┬──────────┬──────────┬─────────────┬─────────────┬───────────────────────┐
│ Name │ Owner │ Encoding │ Collate │ Ctype │ Access privileges │
├─────────────┼──────────┼──────────┼─────────────┼─────────────┼───────────────────────┤
│ foo_aaa_bar │ nd │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ │
│ postgres │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ │
│ template0 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ =c/postgres ↵│
│ │ │ │ │ │ postgres=CTc/postgres │
│ template1 │ postgres │ UTF8 │ en_US.UTF-8 │ en_US.UTF-8 │ =c/postgres ↵│
│ │ │ │ │ │ postgres=CTc/postgres │
└─────────────┴──────────┴──────────┴─────────────┴─────────────┴───────────────────────┘
該字符串可以構建為
'prefix_' || :'variable' || '_suffix'
要在CREATE DATABASE
語句中使用它,您必須在函數中使用動態 SQL:
CREATE FUNCTION pg_temp.mkdb(var text) RETURNS void
LANGUAGE plpgsql STRICT AS
$$BEGIN
EXECUTE format('CREATE DATABASE %I;', 'prefix_' || var || '_suffix');
END;$$;
SELECT pg_temp.mkdb(:'variable');
由於該函數是在臨時模式中創建的,因此它將僅存在於該數據庫會話中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.