簡體   English   中英

如何將環境變量從 bash shell (PostgreSQL) 傳遞給 sql 文件

[英]How to pass environment variables to a sql file from bash shell (PostgreSQL)

我需要能夠傳遞環境變量,從 bash shell 使用psql執行.sql文件。

我正在運行的psql命令是:

su postgres -c "psql -v ON_ERROR_STOP=1 -v dbname=example -v dbuser=example -e" < ./create-db.sql

我放example的地方通常分別設置為$DATABASE_NAMEDATABASE_USER ,這在執行psql命令之前在 bash 腳本中設置。

create-db.sql文件為:

\connect postgres
DROP DATABASE IF EXISTS :dbname;
DO $$BEGIN
    CREATE USER :dbuser;
EXCEPTION WHEN duplicate_object THEN
    RAISE NOTICE 'user already exists';
END$$;
ALTER ROLE :"dbuser" SET search_path TO :"dbname",public;
CREATE DATABASE :"dbname"
    OWNER=:dbuser
    ENCODING=UTF8
    LC_COLLATE='en_US.UTF-8'
    LC_CTYPE='en_US.UTF-8'
    TEMPLATE=template0;
\connect :"dbname"
CREATE SCHEMA zulip AUTHORIZATION :"dbuser";

DROP DATABASE IF EXISTS:dbname;行中的變量替換可以,但是在CREATE USER:dbuser; 線路失敗,我已經嘗試過以下每種方式:

CREATE USER:dbuser; CREATE USER:'dbuser'; CREATE USER:"dbuser";

它總是出錯:

You are now connected to database "postgres" as user "postgres".
DROP DATABASE IF EXISTS example;
NOTICE:  database "example" does not exist, skipping
DROP DATABASE
DO $$BEGIN
    CREATE USER :dbuser;
EXCEPTION WHEN duplicate_object THEN
    RAISE NOTICE 'user already exists';
END$$;
ERROR:  syntax error at or near ":"
LINE 2:     CREATE USER :dbuser;
                        ^

我真的不確定上述內容哪里出錯了。 psql -V的 Output 是psql (PostgreSQL) 12.6 (Ubuntu 12.6-0ubuntu0.20.04.1)

沒有 PLSQL,它似乎工作:

\connect postgres
DROP DATABASE IF EXISTS :dbname;
CREATE USER :dbuser;
ALTER ROLE :"dbuser" SET search_path TO :"dbname",public;
CREATE DATABASE :"dbname"
    OWNER=:dbuser
    ENCODING=UTF8
    LC_COLLATE='en_US.UTF-8'
    LC_CTYPE='en_US.UTF-8'
    TEMPLATE=template0;
\connect :"dbname"
CREATE SCHEMA zulip AUTHORIZATION :"dbuser";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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