Django 模型引用到一个 PostgreSQL 外部表(clickhouse_fdw)。

5 浏览
0 Comments

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

有什么建议吗?

0
0 Comments

问题描述: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)

希望本文对遇到类似问题的开发者有所帮助。虽然问题的具体原因未知,但通过重新开始并重新设置项目,我们可以解决这样的问题。在开发过程中,遇到问题时不要气馁,尝试不同的解决方法,相信问题总会得到解决。

0
0 Comments

Django模型引用到PostgreSQL外部表(clickhouse_fdw)的问题出现的原因是用户的Django应用程序没有被授予访问数据库的完全权限。解决方法是通过授予权限或更改数据库配置来解决该问题。

首先,可以尝试按照教程中所述的步骤来授予Django应用程序访问数据库的权限。

如果上述解决方法无效,可以尝试在数据库中为用户授予完全权限。可以参考中的解决方案。

总之,问题的根源是Django应用程序没有被授予访问数据库的完全权限,可以通过授予权限或更改数据库配置来解决该问题。

0