标签: bash

如何从 bash shell (PostgreSQL) 将环境变量传递到 sql 文件

我需要能够从.sql使用 .bashrc 执行文件的 bash shell 传递环境变量psql

psql我正在运行的命令是:

su postgres -c "psql -v ON_ERROR_STOP=1 -v dbname=example -v dbuser=example -e" < ./create-db.sql
Run Code Online (Sandbox Code Playgroud)

我放置的位置example通常分别设置为$DATABASE_NAMEDATABASE_USER,在执行命令之前在 bash 脚本中设置psql

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 …
Run Code Online (Sandbox Code Playgroud)

postgresql psql bash

7
推荐指数
1
解决办法
6863
查看次数

“psql:/usr/pgsql-11/lib/libpq.so.5:没有可用的版本信息(psql需要)”实际上是什么意思?

我对以下输出有疑问:

[nikola@192 ~] $ sudo su - postgres
[postgres@192 ~] $ psql dvdrental postgres
psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)
psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)
psql (11.7, server 11.8)
Type "help" for help.

dvdrental=# 
Run Code Online (Sandbox Code Playgroud)

以下两条消息代表什么,为什么?我正在询问的消息:

  1. psql: /usr/pgsql-11/lib/libpq.so.5: no version information available (required by psql)
  2. psql (11.7, server 11.8)-顺便说一句,这个psql --version命令我获得以下的输出: psql (PostgreSQL) 11.8必须安装才能执行的命令,比如PostgreSQL服务器版本11.7\dt\l)......并输出如下:
postgres=# select * FROM version();
                                                version                                                 
--------------------------------------------------------------------------------------------------------
 PostgreSQL 11.8 on x86_64-pc-linux-gnu, …
Run Code Online (Sandbox Code Playgroud)

postgresql psql scripting bash

4
推荐指数
1
解决办法
8750
查看次数

标签 统计

bash ×2

postgresql ×2

psql ×2

scripting ×1