postgres, данные. Данные нужны для запуска приложения на сервере. При заливке данных в БД виден блок ошибок по функции ON SELECT. Лог установки и код, на который ссылается - в .txt прикрепил.
Прошу подсказать, кто чем может.
В sql знаний пока 0.
Еще добавлю, что postgres установил 16. Приложение использует то ли 8, то ли 9. Быть может дело в несовместимости версий?
В настоящее время правила ON SELECT должны быть безусловными, с характеристикой INSTEAD (вместо исходного), и их действия должны состоять из единственной команды SELECT. Таким образом, правило ON SELECT по сути превращает таблицу в представление, чьим видимым содержимым являются строки, возвращаемые командой SELECT, заданной в правиле, а не данные, хранящиеся в таблице (если они есть). Вообще же для этой цели лучшим стилем считается пользоваться командой CREATE VIEW, а не создавать реальную таблицу и определять затем правило ON SELECT для неё.
Огромное спасибо вам за развернутый ответ. Подскажите тогда, как лучше поступить, чтобы исправить, еще учитываю, что знаний 0. Может что-то точечно изучить, чтобы поправить. Или может вы имели ввиду тупо ON SELECT на CREATE VIEW заменить и будет работать?
лучше всего не использовать руль
Подскажите, как поправить код
Я не уверен, но похоже что в старых версиях Postgres это такой механизм создания view. Соответственно вы можете заменить CREATE RULE "_RETURN" AS ON SELECT TO productioncounting_trackingoperationproductincomponenthelper DO INSTEAD SELECT trackingoperationproductincomponent.id на CREATE VIEW productioncounting_trackingoperationproductincomponenthelper SELECT trackingoperationproductincomponent.id
а может быть тогда стоит поставить старую версию постгрес? На гитхабе в инструкции к проге автор пользовался 8 или 9-й постгрес. Про совместимость версий есть инфа?)
Что касается нумерации - до 9 включительно мажорные релизы разделялись первым числом после точки. Затем, начиная с 10 мажорные релизы стали целочисленной частью номера версии. Т.е. между 9.0 и 9.6 такая же большая разница как например между 10.12 и 16.1 Что касается обратной совместимости - проблемы есть, но скорее редкие. Впрочем мало кто обновляется на 10-15 мажорных релизов сразу как вы.
Понял Из вашего ответа сделаю вывод, что стоит таки поставить старую версию
А "данные"-то Вы эти откуда взяли? Если есть доступ к базе-источнику, то лучше бы попробовать снова — снять дамп нормально и загрузить его в v16. А если такой возможности нет — показанный код придётся переписывать (на CREATE VIEW ... AS SELECT ...), потому что ON SELECT rules на таблицах в PostgreSQL, начиная с v16 (наконец-то!) больше нет.
А снять дамп бинарниками от новой версии поможет?
С репозитория на гитхаб. А базы с рабочей системой и на 16-й версии нет( Можно и переписать. Вполне себе, других ошибок при загрузке не увидел, но не факт, что других ошибок нет. Просто быть может так, что приложение не поймет замененные функции.
> С репозитория на гитхаб. Да, это хуже. Тогда вариант: > Можно и переписать. > но не факт, что других ошибок нет. Да, но с этих можно начать, по крайней мере. > приложение не поймет замененные функции. Хмм... какие "функции"? В том, что Вы показали, ошибки только про rules, вроде как.
респект за боевой Markdown) > ... какие "функции"?... ну вот и говорю, что знаний нет по sql. Но видел проблему так, что приложение что-то будет искать в этой базе по каким-то ключевым словам, которые я вот заменю в файлике sql. Я понимаю, что файлик - это команды, которые строит архитектуру базы. Но вот будет ли архитектура, которая получалась через ON SELECT в 9.5 соответствовать тому, ято я сделаю через CREATE VIEW на 16-й
Да, будет. То, что есть в этом файле — это такой [очень] старый способ создания view, по сути. Например: https://dbfiddle.uk/8vFyUVDf
Понял. Убедили, отредактирую код. А поставить второй постгрес на дебиан параллельно адекватная идея?) Если 16 тип остановлю, а 9.5 накачу. Не будет ли конфликтов? Или надо через purge удалить обязательно? Или кроме purge еще что-то надо очистить дополнительно?)
Да, можно поставить. Если брать пакеты из PGDG (или его архива, см. https://apt-archive.postgresql.org/ ) — конфликтов не будет (они для этого и предназначены, собственно).
Вполне нормально сосуществуют на разных портах. Скорее всего первый поставленый на порт 5432, а следующий поставленый будет использовать порт 5433. Но боюсь 9.5 окажется недостаточно старым.
старым для чего?)
Для того чтоб без ошибок загрузить этот дамп базы с github
А подскажете, как загружаются старые версии? Сижу на Debian 12, хочу Postgres 9.5.1. В sources.list добавил репозиторий этот, но при apt update выдает какую-то ошибку gpg и нет файла release. Пакет для установки не находит(
Докер РАН нужная версия постгри
> хочу Postgres 9.5.1. Не хотите. ;) Вам нужен последний minor v9.5, серьёзно. > А подскажете, как загружаются старые версии? Там же где-то рядом была инструкция (и у меня всё по ней работало, кажется), нет?
Если ругается на apt update значит что-то напутали с добавлением репозитория
Все черным по белому написано Ищите другую репу
При добавлении pgdg репозитория соответствующий крипографический ключ добавляли?
Хорошо, 9.5, спасибо) Ну вот, дистрибутивы и взял с https://apt-archive.postgresql.org/ вставил, но нет(
переведите, пожалуйста, что имеете ввиду
нет, впервые слышу про такой ключ(
Есть у меня гипотеза что подойдёт ключ от обычного (не архивного) репозитария. Сможете самостоятельно попробовать? Вот как здесь описано https://www.postgresql.org/download/linux/debian/
Благодарю, сбросил себе пока в избранное. Завтра попробую еще
Он считает что уже стоит 9.5 и рекомендует поставить 16. А дальше говорит что 16 встанет в сторонке от 9.5 и что нужно сделать чтоб обновить 9.5 до 16
Кстати, возможно придётся промежуточную версию (например, 10) ставить, т.к. в одном из предыдущих релизов, вроде, удаляли поддержку обновления со старых версий. Но подробностей не помню, так что придётся почитать release notes.
> встанет в сторонке ну, если я ее оставлю? Спрашиваю во избежание конфликтов в дальнейшем
Да, вполне нормально. Получится два сервиса в systemd. Что-то в духе postgresql@9.5-main и postgresql@16-main
Обсуждают сегодня