气流postgresql后端:(psycopg2.OperationalError)致命:用户“气流”的身份验证失败

时间:2019-12-18 00:02:02

标签: postgresql airflow

尝试将postgresql用作centos7机器上的气流(v1.10.5)的后端(遵循本文:https://www.ryanmerlin.com/2019/07/apache-airflow-installation-on-ubuntu-18-04-18-10/)并看到错误

sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)致命:用户“气流”的身份验证失败

我在机器上的设置是...

[airflow@airflowetl airflow]$ psql airflow
psql (9.2.24)
Type "help" for help.

airflow=> \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 airflow   |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

airflow-> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 airflow   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | airflow=CTc/postgres
 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

airflow=> \c airflow
You are now connected to database "airflow" as user "airflow".

airflow=> \dt
No relations found.

airflow=> \conninfo
You are connected to database "airflow" as user "airflow" via socket in "/var/run/postgresql" at port "5432".



[root@airflowetl airflow]# cat /var/lib/pgsql/data/pg_hba.conf
....
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident



[root@airflowetl airflow]# cat /var/lib/pgsql/data/postgresql.conf
....
# — — — — — — — — — — — — — — — — — — — — — — — — — — — — — 
# CONNECTIONS AND AUTHENTICATION
# — — — — — — — — — — — — — — — — — — — — — — — — — — — — — 
# — Connection Settings -
#listen_addresses = ‘localhost’ # what IP address(es) to listen on;
listen_addresses = ‘*’ # for Airflow connection



[airflow@airflowetl airflow]$ cat airflow.cfg
....
[core]
....
# The executor class that airflow should use. Choices include
# SequentialExecutor, LocalExecutor, CeleryExecutor, DaskExecutor, KubernetesExecutor
#executor = SequentialExecutor
executor = LocalExecutor

# The SqlAlchemy connection string to the metadata database.
# SqlAlchemy supports many different database engine, more information
# their website
#sql_alchemy_conn = sqlite:////home/airflow/airflow/airflow.db
sql_alchemy_conn = postgresql+psycopg2://airflow:mypassword@localhost:5432/airflow

并且不太确定这里可能出什么问题。使用sql_alchemy_conn字符串中的密码,我能够执行“ psql -U airflow --password”并成功登录,因此不确定身份验证的用途。

我注意到的一件奇怪的事是pg_hba.conf行有:

# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             0.0.0.0/0               trust

然而,似乎postgres仍在尝试使用身份验证(尽管我此时多次service postgresql restart)。

有人有进一步的调试建议,还是可以在这里看到错误?

2 个答案:

答案 0 :(得分:1)

您似乎与之匹配

host    all             all             ::1/128                 ident

如果您不使用IPv6,最好先注释掉该行,然后重试

答案 1 :(得分:0)

与本地比较,我的区别之一是我的气流数据库的所有者是您的情况下的用户“气流”是“ postgres”。请运行以下命令:     ALTER DATABASE的气流从所有者变为气流;

问候 xavy