簡體   English   中英

sql文件中的Postgresql命令行變量用法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM