Size: a a a

pgsql – PostgreSQL

2020 July 23

K

Kirill in pgsql – PostgreSQL
Null, т.к для данного id нет partition id который меньше текущего с not null значением
источник

MC

Mikhail Chernyshev in pgsql – PostgreSQL
Добрый день. Кто использует Patroni в связке а consul для отказоустойчивости, подскажите, если есть идея использовать мастер с 1 репликой где они находятся в 2 разных дц, каким образом собирать кластер consul? Сделать 1 кластер и разбить его по разным дц, что выглядит не очень хорошо или создать 2 кластера в каждом дц? Но есть подозрение, что второе решение может привести в итоге к split brain если сеть между 2 дц станет нелоступна.
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Добрый день, такой вопрос - читал что в постгресе нельзя добавлять в блоке транзакции значение в перечисления, на десктопе так и работает, но если поднимать постгрес с контейнера - то там это почему-то можно делать. Кто-нибудь может сказать, в чем может быть такое поведение?
источник

MD

Memory Doctor in pgsql – PostgreSQL
Yan Shkurinskiy
Добрый день, такой вопрос - читал что в постгресе нельзя добавлять в блоке транзакции значение в перечисления, на десктопе так и работает, но если поднимать постгрес с контейнера - то там это почему-то можно делать. Кто-нибудь может сказать, в чем может быть такое поведение?
Что значит на десктопе?
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
"Не в контейнере"
источник

MD

Memory Doctor in pgsql – PostgreSQL
Yan Shkurinskiy
Добрый день, такой вопрос - читал что в постгресе нельзя добавлять в блоке транзакции значение в перечисления, на десктопе так и работает, но если поднимать постгрес с контейнера - то там это почему-то можно делать. Кто-нибудь может сказать, в чем может быть такое поведение?
А можно ссылку где это написано? Ddl в постгре транзакционный, по идее можно изменять enum
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Ща
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Так, может я туплю, для 9.4 написано вот

ALTER TYPE ... ADD VALUE (the form that adds a new value to an enum type) cannot be executed inside a transaction block

А для 12 уже вот

If ALTER TYPE ... ADD VALUE (the form that adds a new value to an enum type) is executed inside a transaction block, the new value cannot be used until after the transaction has been committed

Может у меня локально стояла старая, но я как будто проверял, что локально стояла новая -.- В контейнере точно 12-ая
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Просто один и тот же код с миграциями нормально отрабатывает в контейнере и падал на локальной машине
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Собственно, новое значение там не используется до коммита
источник

MD

Memory Doctor in pgsql – PostgreSQL
Select version()
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Такс, 10...
источник

YS

Yan Shkurinskiy in pgsql – PostgreSQL
Понял, сам дурак(
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Kirill
вот запрос на таблицу
CREATE TABLE my_table (id int, partition_id int, text varchar);
INSERT INTO my_table VALUES
(1, 1, 'one'),
(1, 2, NULL),
(1, 3, NULL),
(1, 4, 'two'),
(2, 1, NULL),
(2, 2, 'three'),
(2, 3, NULL);
WITH t(id,partition_id,data) AS (
 VALUES (1, 1, 'one'::text), (1, 2, NULL), (1, 3, NULL), (1, 4, 'two'),
        (2, 1, NULL), (2, 2, 'three'), (2, 3, NULL)
), u AS (
 SELECT *, max(data) OVER (PARTITION BY id, gg) filler FROM (
   SELECT *, sum(g) OVER (PARTITION BY id ORDER BY partition_id) gg FROM (
     SELECT *, CASE WHEN data IS NOT NULL AND data IS DISTINCT FROM lag(data) OVER (PARTITION BY id ORDER BY partition_id) THEN 1 END g FROM t
     ) x
   ) y
  ORDER BY id, partition_id
)
SELECT * FROM u;
--UPDATE t SET data=u.filler FROM u WHERE t.id=u.id AND t.partition_id=u.partition_id AND t.data IS NULL;
источник

VY

Victor Yegorov in pgsql – PostgreSQL
но это не быстро. может было бы проще перебором
источник

K

Kirill in pgsql – PostgreSQL
ого, спасибо большое. Буду разбираться
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
В oracle было бы значительно проще
источник

АЛ

Аггей Лоскутников... in pgsql – PostgreSQL
Из-за поддержки в LAG параметра IGNORE NULLS
источник

KK

Konstantin K in pgsql – PostgreSQL
я иначе делал... сначала вычислял row_number(), потом связывал результат сам с собой по условию rownumber = rownumber + 1
источник

KK

Konstantin K in pgsql – PostgreSQL
и считал
источник