我有一个Django项目。我使用clickhouse_fdw将clickhouse表与postgres表连接起来。
按照clickhouse的指导,在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
同样来自dbshell:
database => SELECT * FROM clickhouse_table LIMIT 1;
ERROR: permission denied for foreign table clickhouse_table
有什么建议吗?
最佳答案
你的Django应用程序需要完全访问数据库。此外,Django还为您提供ORM。你可以考虑用它。
关于django - Django模型对Postgres外部表(clickhouse_fdw)的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57011669/