Django模型对Postgres外部表(clickhouse_fdw)的引用

时间:2019-07-12 17:35:01

标签: django postgresql clickhouse foreign-data-wrapper postgres-fdw

我有一个Django项目。我已使用clickhouse_fdw将Clickhouse表与Postgres表连接。 按照clickhouse_fdw的说明,在postgres中,我这样做了:

CREATE EXTENSION clickhousedb_fdw;
CREATE SERVER clickhouse_svr FOREIGN DATA WRAPPER clickhousedb_fdw OPTIONS(host 'host', dbname 'dbname', driver '/var/lib/postgresql/libclickhouseodbc.so');
CREATE USER MAPPING FOR CURRENT_USER SERVER clickhouse_svr;
CREATE FOREIGN TABLE clickhouse_table ("date_from" Date, "date_to" Date ... ) server clickhouse_svr options(table_name 'table');

这可以使用psql命令运行,但是现在我想从Django访问(我可以访问所有其他表而没有任何问题)。 我为Clickhouse表添加了新模型,并在Django中忽略了对其的迁移和管理。

然后在django shell中尝试:

ClickHouseTable.objects.all()
ClickHouseTable.objects.raw('SELECT * FROM clickhouse_table LIMIT 1')[0]
from django.db import connection
with connection.cursor() as cursor:
    cursor.execute('SELECT * FROM clickhouse_table LIMIT 1')
    row = cursor.fetchone()

随着每一个查询我得到:

ProgrammingError: permission denied for foreign table clickhouse_table

也来自dbshel​​l:

database => SELECT * FROM clickhouse_table LIMIT 1;
ERROR:  permission denied for foreign table clickhouse_table

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您的Django应用需要对数据库的完全访问权限。此外,Django还为您提供ORM。您可能会考虑使用它。

答案 1 :(得分:0)

我从头开始,现在可以正常工作。不知道发生了什么事:/