Size: a a a

pgsql – PostgreSQL

2021 March 02

НШ

Назар Швець... in pgsql – PostgreSQL
error_404
Может в том проекте подрубил то,что не сделал здесь?
Сделал новую пустую модельку с стандартными полями, её с такой же ошибкой выкидывает
источник

e

error_404 in pgsql – PostgreSQL
Хмм,тут я не смогу помочь,сори
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Назар Швець
Ну вообще не трудно, но зачем если должен создаваться через sequelize динамически. И по сути, проблему не решает, ибо таблица не одна в проекте
это оффтоп тут
источник

M

Maxim in pgsql – PostgreSQL
Maxim
Люди добрые, а как можно получить только один вложенный массив?
Например, {1-electrical-components} или  {1-electrical-components,2-motor-control-and-protection,3-magnetic-contactors}, но не {{}}.


SELECT p.product_id,
      ARRAY_AGG(cv.slugs) FILTER (WHERE cv.slugs IS NOT NULL) AS category_slugs
 FROM products AS p
      LEFT JOIN shop_settings AS ss
             ON ss.product_id = p.product_id
            AND ss.deleted = FALSE
      LEFT JOIN brands AS b
             ON b.brand_id = p.brand_id
      LEFT JOIN categories_view AS cv
             ON cv.category_id = p.category_id
GROUP BY p.product_id;


             product_id                                             |                                                                          category_slugs                                                                          
--------------------------------------------- +-----------------------------------------------------------------------------------------------------------------------------------------------------------------
cc415d6c-02b4-4f1c-b0eb-f50bd436d516    | {{1-electrical-components,2-motor-control-and-protection}}
58bd6c91-8ff5-4b4e-a822-b5bed849986b  | {{1-electrical-components}}
0f69a750-c902-430a-ac11-11f9964d353e    | {{1-electrical-components,2-motor-control-and-protection,3-magnetic-contactors},{1-electrical-components,2-motor-control-and-protection,3-magnetic-contactors}}
nnn                                                                       |
1                                                                           |
Агрегат самодельный тут вписывается неплохо:
```
CREATE AGGREGATE array_accum (anyarray)
(
   sfunc = array_cat,
   stype = anyarray,
   initcond = '{}'
);


SELECT ARRAY_ACCUM(DISTINCT cv.slugs)

             product_id              |                                  array_accum
--------------------------------------+--------------------------------------------------------------------------------
0f69a750-c902-430a-ac11-11f9964d353e | {1-electrical-components,2-motor-control-and-protection,3-magnetic-contactors}
1                                    | {}
58bd6c91-8ff5-4b4e-a822-b5bed849986b | {1-electrical-components}
cc415d6c-02b4-4f1c-b0eb-f50bd436d516 | {1-electrical-components,2-motor-control-and-protection}
nnn                                  | {}
```

https://www.postgresql.org/docs/9.2/xaggr.html
https://stackoverflow.com/questions/43472482/postgres-array-agg-throws-cannot-accumulate-empty-arrays-for-empty-arrays
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Ivan
А как вы это делали? Не поделитесь опытом?
Вот смотрите, у вас задача обновить кластера. Что в кластерах, какие БД и схемы - по большому счёту важно только в плане возможности самого обновления, ссылку на мастер-класс Андрея Сальникова по обновлению мажорной версии ПГ я совсем недавно приводил. Т.е. в случае различий в схемах и используемых расширений вам в любом случае необходимо будет вручную проверять все различные конфигурации на возможность обновления.  
Соответственно, я лично рисовал роль следующим образом: вручную выполнял всё необходимое, перенося каждый шаг в ансибловую роль. У меня ещё было весело, ПГ был на тот момент уже неподдерживаемой версии, и некоторые расширения нужной версии на него не становились. Соответственно, пришлось обновляться в два этапа: до 9.6, а затем до нужной. Т.е. будьте готовы к такому повороту.
Т.е. роль может получиться вполне себе развесистой, с приличным количеством условий выполнения в зависимости от версий ПО и ролей, но на 46 хостах (23 кластера, если я правильно понял) затраты на написание роли отбиваются на ура. Повторяю, самое главное: роль создаётся путём переноса вручную выполняемых действий! Всё остальное детали, которые надо знать, чтобы что-то советовать. И да, это было на прошлой галере, сейчас у меня зверинец из кластерных решений, соответственно, роль для обновления будет ещё более вычурная.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Михаил Шурутов
Нормально ансиблом ПГ апгрейдится безо всякого башизма.
Подскажите тогда как можно идемпотентно вызывать pg_upgrade --check и последующий pg_upgrade. Там же без костылей в виде command (shell тоже не считается) не обойтись. Со всем остальным в целом проблем нет.
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Alexey Lesovsky
Подскажите тогда как можно идемпотентно вызывать pg_upgrade --check и последующий pg_upgrade. Там же без костылей в виде command (shell тоже не считается) не обойтись. Со всем остальным в целом проблем нет.
А pg_upgrade --check - это на вручную проверить кластер на возможность обновления. В эту ручную проверку не только вот эта команда входит, но и заливка дампа схемы в новую версию.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
> вручную выполнял всё необходимое, перенося каждый шаг в ансибловую роль

вот это то как раз и смущает (( что надо руками дергать почти самые важные команды, регистрировать их выхлоп в переменные и потом городить условные операторы ((
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
вот все эти ручные команды это и есть "башизм", и это плохо
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Alexey Lesovsky
> вручную выполнял всё необходимое, перенося каждый шаг в ансибловую роль

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

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Alexey Lesovsky
вот все эти ручные команды это и есть "башизм", и это плохо
Башизм, оно же бездумное рукоблудие  по моему нескромному мнению - это когда рутинные операции раз за разом выполняются руками без попыток автоматизировать свои действия.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
не, ну смотрите, простой модуль file
- name: Change file ownership, group and permissions
 ansible.builtin.file:
   path: /etc/foo.conf
   owner: foo
   group: foo
   mode: '0644'

здесь говорится что файл должен существовать с определенными атрибутами - здесь не говорится как его следует создать.

а в случае использования command вылезает императивность и тут явно указывается что и каким образом следует создать - это антипаттерн которым неследует злоупотреблять.
- name: Create file
 ansible.builtin.command: touch /etc/foo.conf

- name: Change group and permissions
 ansible.builtin.command: chmod 0640 /etc/foo.conf


но если писать pg_upgrade роль, то там этих command может быть в большом изобилии, в этом и печаль
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
Михаил Шурутов
Башизм, оно же бездумное рукоблудие  по моему нескромному мнению - это когда рутинные операции раз за разом выполняются руками без попыток автоматизировать свои действия.
башизм это когда баш скрипты дергаются ансиблом, или команды оборачиваются в примитивы ансибла (when, loop и т.п.)
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Alexey Lesovsky
не, ну смотрите, простой модуль file
- name: Change file ownership, group and permissions
 ansible.builtin.file:
   path: /etc/foo.conf
   owner: foo
   group: foo
   mode: '0644'

здесь говорится что файл должен существовать с определенными атрибутами - здесь не говорится как его следует создать.

а в случае использования command вылезает императивность и тут явно указывается что и каким образом следует создать - это антипаттерн которым неследует злоупотреблять.
- name: Create file
 ansible.builtin.command: touch /etc/foo.conf

- name: Change group and permissions
 ansible.builtin.command: chmod 0640 /etc/foo.conf


но если писать pg_upgrade роль, то там этих command может быть в большом изобилии, в этом и печаль
Одно дело, когда есть нужные модули, и совсем другое, когда их нет. При отсутствии придётся выкручиваться. Я вот, например, не вижу среди модулей инициализацию инстанса (может плохо смотрю), поэтому меня выворачивает, но приходится использовать command. :( Так же и с ролью для обновления.
ЗЫ. О какой идемпотентности может идти речь, если в 2.8, 2.9 я использую:
- name: create ~/.ssh dir for user postgres
 file:
   path: "{{ PG_HOME_DIR }}/.ssh"
   owner: postgres
   group: postgres
   mode: '0700'
А в latest:
- name: create ~/.ssh dir for user postgres
 ansible.builtin.file:
   path: "{{ PG_HOME_DIR }}/.ssh"
   owner: postgres
   group: postgres
   mode: '0700'

В latest я сейчас полный список модулей не вдруг нашёл... о_О
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Мне все свои роли/плейбуки переписывать, чтобы указать где встроенный модуль, где - от сообщества, и вот это вот всё? ПИчалька, однако. :(
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Alexey Lesovsky
башизм это когда баш скрипты дергаются ансиблом, или команды оборачиваются в примитивы ансибла (when, loop и т.п.)
Спасибо, понятно. Был неправ, погорявился.
источник

OB

Oleg Bartunov in pgsql – PostgreSQL
Warstone
Уже можно говорить что JSON неюзабельный на больших объемах, так как канал забивает. Из-за чего приходится хранить как inflate bytea? ))
А подробнее ?
источник

I

Ivan in pgsql – PostgreSQL
Михаил Шурутов
А pg_upgrade --check - это на вручную проверить кластер на возможность обновления. В эту ручную проверку не только вот эта команда входит, но и заливка дампа схемы в новую версию.
Это как раз основная проблема, которая всплыла. Вся работа с постгрес выполняется через баш скрипты и модулей для подобной работы с постгресом нет.
источник

AL

Alexey Lesovsky in pgsql – PostgreSQL
а есть хорошие питонисты в команде? модуль то можно и написать, благо примеров достаточно
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Ivan
Это как раз основная проблема, которая всплыла. Вся работа с постгрес выполняется через баш скрипты и модулей для подобной работы с постгресом нет.
Как вы будете выкручиваться в ситуации, когда одному расширению нужен один промежуточный этап (обновление до промежуточной мажорной версии), другому - другой, и т.д.?
например, обновление с 9.3 до 11-й версии ПГ при наличии постгиса точно требует промежуточного обновления?
источник