Size: a a a

pgsql – PostgreSQL

2020 May 28

РЖ

Роман Жарков... in pgsql – PostgreSQL
Никогда этого не пойму:

test=# select now(), now()::timestamp at time zone 'Europe/Moscow', now()::timestamptz at time zone 'Europe/Moscow';
             now              |           timezone            |          timezone
-------------------------------+-------------------------------+----------------------------
2020-05-28 09:53:49.303624+00 | 2020-05-28 06:53:49.303624+00 | 2020-05-28 12:53:49.303624
(1 row)

test=#
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Запомнил только, что не надо timestamp использовать совсем.
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Да, жестяк.

Примечательно, что:
<timstamp> at time zone … —> timestamptz
<timestamptz> at time zone … —> timestamp
источник

DG

Denis Girko ☕️ in pgsql – PostgreSQL
Прям как унарный оператор.
источник

b

blkmrkt in pgsql – PostgreSQL
Konstantin Knizhnik
Постгрес  использует malloc внутри бэкенда для "рабочей" памяти при обработке запроса.
Если malloc  возвращает NULL, то просто репортится ошибка:

src/backend/utils/mmgr/mcxt.c:
 if (unlikely(ret == NULL))
 {
   MemoryContextStats(TopMemoryContext);
   ereport(ERROR,
       (errcode(ERRCODE_OUT_OF_MEMORY),
        errmsg("out of memory"),
        errdetail("Failed on request of size %zu in memory context \"%s\".",
              size, context->name)));
 }


После чего абортируется текущая транзакция. И сам постгрес и даже  бэкенд продолдают работу.
Размер временной памяти задаётся work_mem параметром, но это не жётское ограничение но "пожелание" посгресу не выходить за эту границу.

Но недостаток памяти в системе может сказаться не только на malloc-е.
И для shared memory может не хватить физической памяти (особенно если выключен свап)
Тогда придёт страшный OOM killer и прибьёт первого попавшегося. Это с большой вероятностью приведёт к перезагрузке всего постгреса.

Справиться с этим на уровне посгреса никак нельзя. Можно пытаться ограничить аппетиты бэкендов и других процессов с помощью квот или  cgroups. Ну или иметь достаточный СВАП.
Ну а самое правильное - не запускать такие процессы которые выжрают всю память:)
Вау спасибо большое за объяснение!
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Роман Жарков
Никогда этого не пойму:

test=# select now(), now()::timestamp at time zone 'Europe/Moscow', now()::timestamptz at time zone 'Europe/Moscow';
             now              |           timezone            |          timezone
-------------------------------+-------------------------------+----------------------------
2020-05-28 09:53:49.303624+00 | 2020-05-28 06:53:49.303624+00 | 2020-05-28 12:53:49.303624
(1 row)

test=#
Тут всё очевидно, вообще-то.
И кстати, если нужно "всерьёз" работать с временными отметками —  пока Вы этого не поймёте, лучше даже не начинать, IMNSHO. ;)
источник

in pgsql – PostgreSQL
Хотел сделать pg_upgrade, может кто знает как это пофиксить?
источник

in pgsql – PostgreSQL
источник

П

Павел П. in pgsql – PostgreSQL
Хотел сделать pg_upgrade, может кто знает как это пофиксить?
постгис небось?)
источник

in pgsql – PostgreSQL
Павел П.
постгис небось?)
не знаю, первый раз тронул postgres вне докера, не особо в терминах)
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Yaroslav Schekin
Тут всё очевидно, вообще-то.
И кстати, если нужно "всерьёз" работать с временными отметками —  пока Вы этого не поймёте, лучше даже не начинать, IMNSHO. ;)
Спасибо, уже начал не начинать.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Александр Филиппенко
Всем привет, возник вопрос по таймзонам.
На сервере стоит таймзона UTC, даты хранятся в обычном timestamp,
когда я пишу select created_at at time zone 'Europe/Moscow' я ожидаю увидеть сохранённое время +3 часа, но получаю -3.
Почему это так работает? Как получать дату и время скорректированные под таймзону текущего юзера (она известна, хранится в виде строки)
> На сервере стоит таймзона UTC

На каком сервере? В PostgreSQL не существует такой вещи, как "серверная time zone", есть только default для новых сессий.

> , даты хранятся в обычном timestamp,

И это уже fail. Более того, если они там (почему-то) не только в UTC — это уже не исправишь.
Правильный тип для хранения моментов времени в прошлом — только timestamtptz.
Вообще, см. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Date.2FTime_storage
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Роман Жарков
Спасибо, уже начал не начинать.
Да Вы не принимайте на свой счёт, если что — просто в этой теме и так немало мороки (если данные "со всего света").
И это даже при условии "владения инструментом", т.е. понимания того, как timestamp-ы работают в PostgreSQL.

У меня, например, есть подозрение, что в некоторых особо "удачных" ситуациях работы с датой/временем, с которыми мне приходилось сталкиваться, ошиблись бы вообще все присутствующие в этом чате (потому очень долбанутые законы (связанные с time zones) бывают во всяких неведомых странах) . ;)
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Yaroslav Schekin
Да Вы не принимайте на свой счёт, если что — просто в этой теме и так немало мороки (если данные "со всего света").
И это даже при условии "владения инструментом", т.е. понимания того, как timestamp-ы работают в PostgreSQL.

У меня, например, есть подозрение, что в некоторых особо "удачных" ситуациях работы с датой/временем, с которыми мне приходилось сталкиваться, ошиблись бы вообще все присутствующие в этом чате (потому очень долбанутые законы (связанные с time zones) бывают во всяких неведомых странах) . ;)
Да я шучу. Все три раза когда мне надо было аккуратно поработать с таймзонами я аккуратно разбирался в необходимых пределах.
Первый раз я накололся на переходе на летнее время кучу лет назад :)
источник

П

Павел П. in pgsql – PostgreSQL
не знаю, первый раз тронул postgres вне докера, не особо в терминах)
https://postgrespro.ru/docs/postgresql/9.6/pgupgrade

ну, тут 5й пункт говорит о том что нужно проверить что в новой установке есть все расширения и пр. что были в старом. Походу этот пункт пропущен при подготовке.
Какой именно postgis и как с ним обращаться при pg_upgrade к сожалению не подскажу - нет опыта. Но палюбому гуглить начать с этого.
источник

in pgsql – PostgreSQL
Павел П.
https://postgrespro.ru/docs/postgresql/9.6/pgupgrade

ну, тут 5й пункт говорит о том что нужно проверить что в новой установке есть все расширения и пр. что были в старом. Походу этот пункт пропущен при подготовке.
Какой именно postgis и как с ним обращаться при pg_upgrade к сожалению не подскажу - нет опыта. Но палюбому гуглить начать с этого.
сейчас буду сёрчить, спасибо
источник

АФ

Александр Филиппенко... in pgsql – PostgreSQL
Yaroslav Schekin
> На сервере стоит таймзона UTC

На каком сервере? В PostgreSQL не существует такой вещи, как "серверная time zone", есть только default для новых сессий.

> , даты хранятся в обычном timestamp,

И это уже fail. Более того, если они там (почему-то) не только в UTC — это уже не исправишь.
Правильный тип для хранения моментов времени в прошлом — только timestamtptz.
Вообще, см. https://wiki.postgresql.org/wiki/Don%27t_Do_This#Date.2FTime_storage
я про результат select current_setting('TIMEZONE');
Да я уже понял какие проблемы, это были поля созданные Ларавелем, и он из php заполнял даты. Сейчас буду перепиливать эти поля на timestamptz. Благо можно считать что для всех это было Europe/Moscow.
Больше так не буду)
источник

KT

Konstantin Tupitsin in pgsql – PostgreSQL
Каждый раз когда работаю с PG  и возникает вопрос с метками времени, обращаюсь к этой статье) https://habr.com/ru/post/273177/
источник

М

Максим in pgsql – PostgreSQL
Ребята, а как в postgresql оптимально, и главное правильно агрегировать данные, например
кол-во в каждой десятиминутке? (в таблице записан timestamp without timezone)
источник

М

Максим in pgsql – PostgreSQL
substring(to_char(datetime::timestamp, 'YYYY-MM-DD HH:MI:SS'), 0,16)
Это какое-то кощунство как по мне
🙂 Работает, но очень медленно и ваще хочется научится делать по нормальному
источник