Django и Pipelinedb: ошибка программирования: столбец <имя_базы_данных> .location_id не существует - PullRequest
0 голосов
/ 01 сентября 2018

Я работаю над проектом с использованием Django и postgresdb с потоковой передачей данных с использованием pipelinedb. Сценарий синхронизации выполняет это. Все докеризовано.

Данные обновляются каждые 60 секунд на тестовом сервере.

Я добавил это поле в модель:

location = models.ForeignKey('Location', related_name='assigned_sensor', on_delete=models.CASCADE, null=True)

И для справки: модели погоды и местоположения:

class WeatherStatsMrel(models.Model):
    id = models.BigIntegerField(db_column='$pk', primary_key=True)
    loc = models.CharField(max_length=3, null=True)
    dat = models.DateField(blank=True, null=True, editable=True)
    tim = models.TimeField(blank=True, null=True, editable=False)
    aws = models.FloatField(blank=True, null=True, editable=False)
    awd = models.TextField(blank=True, null=True, editable=False)
    mws = models.FloatField(blank=True, null=True,editable=False)
    mwd = models.TextField(blank=True, null=True,editable=False)
    tmp = models.FloatField(blank=True, null=True,editable=False)
    hum = models.FloatField(blank=True, null=True,editable=False)
    r10 = models.FloatField(blank=True, null=True,editable=False)
    r60 = models.FloatField(blank=True, null=True,editable=False)
    rda = models.FloatField(blank=True, null=True,editable=False)
    rcu = models.TextField(blank=True, null=True,editable=False)
    rad = models.TextField(blank=True, null=True,editable=False)
    sun = models.TextField(blank=True, null=True,editable=False)
    location = models.ForeignKey('Location', related_name='assigned_sensor', on_delete=models.CASCADE, null=True)

    class Meta:
        db_table = 'weather_stats_mrel'


    def __unicode__(self):
        return str({self.loc}, {self.dat}, {self.tim}, {self.aws}, {self.awd}, {self.mws}, {self.mwd}, {self.tmp}, {self.hum}, {self.r10}, {self.r60}, {self.rda}, {self.rcu}, {self.rad}, {self.sun})    

class Location(models.Model):
    id = models.AutoField(primary_key=True)
    abbreviated_name = models.CharField(max_length=3)
    full_name = models.CharField(max_length=25)

    def __str__(self):
        return self.abbreviated_name

Когда я запускаю сервер, все в порядке. На странице администратора (страница администратора по умолчанию в Django) я могу перейти на страницу weather_stats_mrel в попытке , чтобы просмотреть поступающие данные.

Однако, когда Pipelindb обновляет таблицу, я получаю эту ошибку при попытке просмотреть страницу:

ProgrammingError at /admin/test_sensor_app/weatherstatsmrel/
column weather_stats_mrel.location_id does not exist
LINE 1: ...er_stats_mrel"."rad", "weather_stats_mrel"."sun", "weather_s...
                                                             ^
Request Method: GET
Request URL:    http://localhost:8000/admin/test_sensor_app/weatherstatsmrel/
Django Version: 2.1.1
Exception Type: ProgrammingError
Exception Value:    
column weather_stats_mrel.location_id does not exist
LINE 1: ...er_stats_mrel"."rad", "weather_stats_mrel"."sun", "weather_s...
                                                             ^

Насколько я понимаю, Django должен автоматически добавлять это поле, верно? Или мне теперь нужно добавить эту таблицу вручную? Где бы я положил его в модель?

У меня никогда раньше не было этой проблемы при использовании ForeignKeys, но опять же, это первый раз, когда я работаю с таблицами, которые предварительно сгенерированы до того, как Django даже коснулся их.

Есть ли решение этой проблемы? Кто-нибудь еще сталкивался с этим раньше?

1 Ответ

0 голосов
/ 07 сентября 2018

Похоже, у вас есть непрерывное представление с именем weather_stats. Невозможно добавить столбцы в существующее непрерывное представление, поэтому, если вы не включили location_id в определение непрерывного представления, этого столбца там не будет.

...