Size: a a a

pgsql – PostgreSQL

2021 March 23

YS

Yaroslav Schekin in pgsql – PostgreSQL
Gleb
я и не говорю что будет в результате работы транзакции, я говорю что транзакция получит модифицированные данные (после селекта выбранные данные окажутся модифицированными). Вот и вопрос, почему так? Ведь написано, что на этом уровне изоляции транзакция не должна видеть изменения произведенные другими транзакиями.
Нет, не получит (опять-таки, там этого не написано).
И Вы бы знали это, если бы попробовали тривиальные тесты, кстати. ;)
Т.е. если хотите подробно разбираться — лучше создать тестовые таблицы, открыть две сессии и пробовать всё, что смущает.
источник

G

Gleb in pgsql – PostgreSQL
Yaroslav Schekin
Нет, не получит (опять-таки, там этого не написано).
И Вы бы знали это, если бы попробовали тривиальные тесты, кстати. ;)
Т.е. если хотите подробно разбираться — лучше создать тестовые таблицы, открыть две сессии и пробовать всё, что смущает.
Спасибо, обязательно сделаю это, но все же, если вы говорите что не получит, то как понимать это абзац?
UPDATE, DELETE ... commands behave the same as SELECT in terms of searching for target rows: they will only find target rows that were committed as of the transaction start time. However, such a target row might have already been updated (or deleted or locked) by another concurrent transaction by the time it is found.
источник

AZ

Artem Zhiltsov in pgsql – PostgreSQL
Всем привет. Не подскажете, есть ли мануал по апгрейду с 9.6.20 до 10?
Уж больно много чейнджей в 10 версии.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Gleb
Спасибо, обязательно сделаю это, но все же, если вы говорите что не получит, то как понимать это абзац?
UPDATE, DELETE ... commands behave the same as SELECT in terms of searching for target rows: they will only find target rows that were committed as of the transaction start time. However, such a target row might have already been updated (or deleted or locked) by another concurrent transaction by the time it is found.
Тем не менее, такая запись может быть уже модифицирована (или удалена, или заблокирована) другой конкурентной (параллельно выполняющейся) транзакцией к тому моменту, когда [эта запись] будет найдена.
источник

G

Gleb in pgsql – PostgreSQL
Yaroslav Schekin
Тем не менее, такая запись может быть уже модифицирована (или удалена, или заблокирована) другой конкурентной (параллельно выполняющейся) транзакцией к тому моменту, когда [эта запись] будет найдена.
ну да) что я сказал не так?)
источник

AZ

Artem Zhiltsov in pgsql – PostgreSQL
или по классике идём штудировать релиз ноутс и проводим тестовый апгрейд на непрод-среде?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Gleb
ну да) что я сказал не так?)
То, что нигде тут не написано, что данная транзакция её увидит.
Описывается неизбежная реальность — транзакции происходят, [такие] изменения случаются.
Почему Вы не читаете текст дальше, а "застряли" на этом предложении?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Artem Zhiltsov
или по классике идём штудировать релиз ноутс и проводим тестовый апгрейд на непрод-среде?
Yep. ;)
источник

EM

Eldar M in pgsql – PostgreSQL
Добрый день, товарищи, подскажите, пожалуйста, почему могут не сохраняться настройки password_encryption? Хочу поставить md5 (взамен scram-sha-256), делаю Set password_encript..., меняю в pg_hba.conf на md5, но если я перезахожу в psql - show password_encryption снова показывает scram-sha-256
источник

EM

Eldar M in pgsql – PostgreSQL
Или другой вопрос - можно ли хешировать строку scram-sha-256 методом аналогично как md5('string')?
источник

G

Gleb in pgsql – PostgreSQL
Yaroslav Schekin
То, что нигде тут не написано, что данная транзакция её увидит.
Описывается неизбежная реальность — транзакции происходят, [такие] изменения случаются.
Почему Вы не читаете текст дальше, а "застряли" на этом предложении?
все, врубился, спасибо. Действительно чето меня залогало=)
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Eldar M
Добрый день, товарищи, подскажите, пожалуйста, почему могут не сохраняться настройки password_encryption? Хочу поставить md5 (взамен scram-sha-256), делаю Set password_encript..., меняю в pg_hba.conf на md5, но если я перезахожу в psql - show password_encryption снова показывает scram-sha-256
Скорее всего вы в настройках текущей сессии меняете.
Попробуйте alter system или прямо руками конфиг настроить. Аккуратно.
источник

ЕГ

Евгений Ганьшин... in pgsql – PostgreSQL
Господа, добрый вечер. Помогите составить запрос, мне нужно вычислить доход юзера за все время и доход за конкретный месяц.
Если добавляю where between(прошлый месяц - этот месяц) то запись выходит всего одна, т.к у одного юзера в этом месяце не было дохода.
источник

EM

Eldar M in pgsql – PostgreSQL
Роман Жарков
Скорее всего вы в настройках текущей сессии меняете.
Попробуйте alter system или прямо руками конфиг настроить. Аккуратно.
спасибо
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Евгений Ганьшин
Господа, добрый вечер. Помогите составить запрос, мне нужно вычислить доход юзера за все время и доход за конкретный месяц.
Если добавляю where between(прошлый месяц - этот месяц) то запись выходит всего одна, т.к у одного юзера в этом месяце не было дохода.
Что-то вроде FROM <users_table> LEFT JOIN <this_table> ON <this_table>.fullname = <users_table>.<как там это поле называется> AND <ещё поле> >= начало_месяца
Но если уже есть запрос для дохода за всё время, то стоит смотреть, как изменить его. А вообще, показали бы Вы то, что у Вас есть — \d каждой таблицы и существующий запрос, например.
источник

ЕГ

Евгений Ганьшин... in pgsql – PostgreSQL
таблица из которой считаем доход
источник

ЕГ

Евгений Ганьшин... in pgsql – PostgreSQL
делал в ормке запрос, квери такое
SELECT "user"."firstname" || ' ' || "user"."lastname" as fullname, "user"."level", COALESCE(SUM("revenues"."revenue"), 0.00) as total_revenue, COALESCE(SUM("revenues_m"."revenue"), 0.00) as this_month_revenue FROM "user" "user" LEFT JOIN "revenue" "revenues" ON "revenues"."userId"="user"."id"  LEFT JOIN "revenue" "revenues_m" ON "revenues_m"."userId"="user"."id" WHERE "user"."referrerId" = 2 AND "revenues_m"."created_at" BETWEEN '2021-02-23'::timestamp and '2021-03-23'::timestamp GROUP BY "user"."id";
источник

AS

Alexey Stavrov in pgsql – PostgreSQL
Denisio
RR гарантирует что если ты прочитал какието записи - то при повторном чтении они будут такие же. Если друга транзакция модифицировала какието записи которые ты не трогал (и уже завершилась commit'ом) - и ты их решил прочитать - ты получишь уже обновлённые записи.
> ты получишь уже обновлённые записи

Возможно так учат в университетах на примерах двухфазных блокировок, но я на самом деле не знаю, чего там рассказывают)
В PG в RR снимок возьмётся во время первого стейтмента транзакции, а дальше строки будут отдаваться, которые изменены были до этого снимка.
А так в целом правильно написано.
источник

KZ

Konstantin Zaitsev in pgsql – PostgreSQL
Евгений Ганьшин
делал в ормке запрос, квери такое
SELECT "user"."firstname" || ' ' || "user"."lastname" as fullname, "user"."level", COALESCE(SUM("revenues"."revenue"), 0.00) as total_revenue, COALESCE(SUM("revenues_m"."revenue"), 0.00) as this_month_revenue FROM "user" "user" LEFT JOIN "revenue" "revenues" ON "revenues"."userId"="user"."id"  LEFT JOIN "revenue" "revenues_m" ON "revenues_m"."userId"="user"."id" WHERE "user"."referrerId" = 2 AND "revenues_m"."created_at" BETWEEN '2021-02-23'::timestamp and '2021-03-23'::timestamp GROUP BY "user"."id";
SELECT "user"."firstname" || ' ' || "user"."lastname" as fullname, "user"."level",
       COALESCE(SUM("revenues"."revenue"), 0.00) as total_revenue,
    COALESCE(SUM("revenues"."revenue") filter ( where "revenues"."created_at" BETWEEN '2021-02-23'::timestamp and '2021-03-23'::timestamp), 0.00) as this_month_revenue
FROM "user" "user" LEFT JOIN "revenue" "revenues" ON "revenues"."userId"="user"."id"  
WHERE "user"."referrerId" = 2   GROUP BY "user"."id";
источник

ЕГ

Евгений Ганьшин... in pgsql – PostgreSQL
РАБОТАЕТ!
источник