我试图在Ubuntu 22.04上的bash中向Postgr数据库传递密码.像这样:

export PGPASSWORD=postgrespw

当我试图在这样的应用程序中使用它们时:

(例如cjdb,一个处理上传到PostgreSQL数据库的程序,https://github.com/cityjson/cjdb:

可以在PGPASSWORD环境变量中指定密码.如果未指定,应用程序将提示输入密码.

)

cjdb import -H localhost -U postgres -d test -s cjdb -f src/cjdb/LoD2_326625712.jsonl

or like this: (martin, a program also handling some database function on PostgreSQL db)

martin --config config.yaml

我总是听到"密码丢失".

直接使用psql的工作原理很奇怪:

psql -U postgres testcjdb -h localhost

上述两个程序都明确声明它们支持使用env变量PGPASSWORD

How can I figure out if it's the programs fault (which I kind of don't believe), or if something is off with my bash terminal?

推荐答案

如果不是程序的错误,the PR you wrote就不会工作;the fact that that PR addresses the problem本身证明了环境变量正在传递给程序,但程序忽略了它(就好像没有传递变量,'PGPASSWORD' in os.environ将是假的).

进一步意味着你可以证明这一点,让你自己满意:

  • 给定运行程序的PID,您可以从/proc/PID/environ读取为该程序定义的环境变量的NUL分隔流.使用tr '\0' '\n'将NUL分隔符更改为新行,以便于人类可读性,或者确保every变量是可读的:

    #!/usr/bin/env bash
    (( $# )) || { echo "Usage: $0 pid [pid2] ..." >&2; exit 1; }
    for pid in "$@"; do
      while IFS= read -r -d '' entry; do
        var=${entry%%=*}
        value=${entry#*=}
        printf '%s=%q\n' "$var" "$value"
      done <"/proc/$pid/environ"
    done
    

    ...可以传递一个PID(或它们的列表),并将以可打印的形式转储环境变量的值,即使它们包含了新行或其他非打印字符.

  • 在shell中,如果字符串类型的变量没有被导出,declare -p varname将发出declare -- varname=...(数组将有declare -a,整数declare -i,名称declare -n等);如果是,则发出declare -x varname=...(或者如果变量根本没有设置,则发出错误).

Postgresql相关问答推荐

如何使用Docker安装PostgreSQL扩展

分区可以用于postgres中的同类查询吗?

我可以将jsonb_set与来自SELECT语句的新值(第三个参数)一起使用吗?

Postgres如何插入带有十进制逗号的实数?

即使存在 GIN 索引,整理默认的类似查询也无法执行

未更改表上的 Postgres 环绕预防

如何为 JavaEE 应用程序中的 PostgreSQL 热备设置配置连接故障转移?

带有 postgres 的 DOCKER 容器,警告:could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted

如何使 Java 和 Postgres 枚举一起工作以进行更新?

从 PostgreSQL 中的字段中提取数字

获取 PostgreSQL 中当前正在运行的查询的参数

为什么 sqlalchemy 的默认列值不起作用

没有查询要创建的in ... error

在同一分区上应用多个窗口函数

如何使用 Django Migrations 重新创建已删除的表?

PostgreSQL - 必须出现在 GROUP BY 子句中或在聚合函数中使用

在 pg_restore 期间排除表

在 OS X 上使用 Postgres.app 时如何将 psql 放在路径上?

如何从我的 postgresql 查询中获取最小值、中值和最大值?

JOIN (SELECT ... ) ue ON 1=1?