Django 模型引用到一个 PostgreSQL 外部表(clickhouse_fdw)。
Django 模型引用到一个 PostgreSQL 外部表(clickhouse_fdw)。
我有一个Django项目。我使用clickhouse_fdw将ClickHouse表与PostgreSQL表连接起来。
按照clickhouse_fdw的说明,我在PostgreSQL中执行了以下操作:
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模型引用postgres外键表(clickhouse_fdw)时出现问题。
解决方法:重新开始并解决了问题,但不清楚具体原因。
最近在使用Django开发一个项目时遇到了一个奇怪的问题。我试图在Django模型中引用一个postgres外键表(clickhouse_fdw),但遇到了一些困难。我尝试了各种方法,但始终无法使其正常工作。我检查了数据库配置、模型定义和外键关联等方面的问题,但仍然找不到解决办法。
最后,我决定从头开始,重新设置整个项目。我删除了之前的代码和配置文件,并重新创建了一个新的Django项目。然后,我重新设置了数据库连接和模型定义,并尝试引用postgres外键表。这次,一切都正常工作了!我成功地创建了外键关联,并且没有遇到任何问题。
尽管问题已经解决了,但我仍然对出现这个问题的原因感到困惑。我对之前的代码和配置进行了详细的检查,但没有发现任何明显的问题。可能是由于某种未知的错误或配置问题导致的。
在开发过程中,我们经常会遇到各种各样的问题,有些问题可能会让我们束手无策。在这种情况下,重新开始可能是解决问题的有效方法之一。尽管不清楚具体原因,但重新开始可以帮助我们摆脱困境并找到解决办法。
代码示例:
# 模型定义 from django.db import models class MyModel(models.Model): foreign_key = models.ForeignKey('myapp.MyOtherModel', on_delete=models.CASCADE) class MyOtherModel(models.Model): field = models.CharField(max_length=50) # 外键关联 mymodel = MyModel.objects.create(foreign_key=myothermodel)
希望本文对遇到类似问题的开发者有所帮助。虽然问题的具体原因未知,但通过重新开始并重新设置项目,我们可以解决这样的问题。在开发过程中,遇到问题时不要气馁,尝试不同的解决方法,相信问题总会得到解决。