powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как обновить таймзону у записи
11 сообщений из 11, страница 1 из 1
Как обновить таймзону у записи
    #38789042
Sean York
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
из-за криворукости админов мы вынуждены проапдейтить старые записи, указав им новую таймзону.

Вопрос: как правильно написать апдейт для поля типа timestamp(6) with time zone чтобы у него поменялась только тайм зона?

То есть было: 2012-10-26 11:37:45+04
А стало: 2012-10-26 11:37:45+03

Для всех записей, созданных до 27.10.2014

Спасибо заранее
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38789068
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sean York,

все записи с типом timestamp with time zone, хранят внутри у себя только время в UTC, никаких таймзон там нет. при запросе таких записей база берет свою текущую таймзону и приводит время к ней.

То есть было: 2012-10-26 11:37:45+04
А стало: 2012-10-26 11:37:45+03

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

если время вставилось кривое из внешнего источника, то нужно к нему добавить/отнять сколько надо часов.

а для обновления таймзон в связи с последними изменениями часовых поясов ничего трогать не нужно, достаточно обновить tzdata и сделать рестарт баз.
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38789123
Sean York
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexius,

если открыть старые записи, то они отображаются с таймзоной +4, новые сохраняются с таймзоной +3.
Это криворукость админов?
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38789158
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sean York,

нет, так и должно быть. таймзона одинаковая, а смещение в разное время может быть разным.
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38790576
DimmaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже у меня та же ситуация.

Обновили Ubuntu 12.04.5. Перезагрузили PostgreSQL.

Записи до 2014-10-26 отображаются как "2014-10-25 00:00:00+04"
Записи после 2014-10-26, вставленные после 2014-10-26, отображаются как "2014-10-27 00:00:00+03"
Записи после 2014-10-26, вставленные ранее, отображаются вообще как "2014-10-31 23:00:00+03"

Почему так? Что неправильно понимаю?

Alexiusтакой ситуации по идее вообще быть никак не должно

Alexiusнет, так и должно быть. таймзона одинаковая, а смещение в разное время может быть разным.

я не понимаю, объясни пожалуйста(((

Код: sql
1.
show timezone



"Europe/Moscow"

Код: sql
1.
2.
3.
4.
 
SELECT * 
 FROM pg_timezone_names
 WHERE name like '%Moscow%';



"Europe/Moscow""MSK""03:00:00"f"posix/Europe/Moscow""MSK""03:00:00"f
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38790625
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже надо прояснить ситуацию

поле с таймзоной А, и поле без таймзоны Б

на сервере стоит зона +4
мы делаем вствку в таблицу(А Б)
10 00 10 00

предположим что подключение дефолтное...тоесть подключение использует таймзону сервера.

тогда сервер думает - время 10 часов, это время +4, значит по ютс время 6 часов.
и запишет в файл данных

06 00 10 00 -второе поле не зависит от таймзоны, тоесть это не метка времени, а время - константа, как текст, просто для экономии байтов и для облегчения арифметики, создали надстройку над целочисленым типом - врем без таймзоны


потом мы даём команду селект

сервер думает, время 6 00, но ведь текущая таймзона +4, значит надо показывать 10

и покажет
10 00 10 00


меняем у подключения таймзону(переменные сессии) ставим в +3

тогда селект выдаст
09 00 10 00

или меняем таймзону на сервере +2

у подключения не выставляем таймзону
получим селектом
08 00 10 00

===========
итого, метка времени(время с тайм зоной) это тип, который преобрабатываеться при чтении записи

при записи, сервер учитывая текущую таймзону, вычисляет время ютс, и сохраняет в ютс

при чтении проиходит обратный процес.


ЗЫ
видели на форумах, помоему на сдешнем тоже такое есть - задишь, и видешь что ктото комент оставил из будущего(время комента больше чем сейчас)

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

тоесть правильная работа форума или чего подобного.

получаем запрос от браузера, при подключении к базе, выставляем для подключения временую зону пользователя, и чтобы юзер не записывал в базу или не читал...путаницы с часами не выйдет.

если петя из штатотв на минуту раньше коли из франции вставил комент, и через минут юзеры из всех таймзон зашли почитать ...все юзеры увидят два комента, один на минуту раньше чем у них виндоус в углу время показывает, другой комент из штатов - на две минуты раньше чем из комп показывает внизу.
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38790632
DimmaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453, спасибо за ответ. Без зоны - все ясно. Я также понимаю, что timestamptz хранит время в UTC.

Но не понимаю почему при селекте он показывает по-разному. У меня два строки - в одной дата до 214-10-16 в другой после. Я делаю селект: в одной строке показывает +4 в другой +3. По идее он же обе строки должен показывать в +3 ?
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38790651
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimmaNНо не понимаю почему при селекте он показывает по-разному. У меня два строки - в одной дата до 214-10-16 в другой после. Я делаю селект: в одной строке показывает +4 в другой +3. По идее он же обе строки должен показывать в +3 ?

нет, для времен после 27 октября будет +3, до – +4. постгрес берет дату и время в utc, смотрит в tzdata какое смещение было в эту дату и выводит с соответствующим смещением.

таким образом, если например каждый день в базу в одно и тоже время (местное) вставляется запись, то и в выборке будет всегда одно и тоже время, но с разным смещением (при смене часового пояса или переходе на летнее время).
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38790654
DimmaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexiusнет, для времен после 27 октября будет +3, до – +4. постгрес берет дату и время в utc, смотрит в tzdata какое смещение было в эту дату и выводит с соответствующим смещением.

тогда понятно. да.
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38791736
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexiusDimmaNНо не понимаю почему при селекте он показывает по-разному. У меня два строки - в одной дата до 214-10-16 в другой после. Я делаю селект: в одной строке показывает +4 в другой +3. По идее он же обе строки должен показывать в +3 ?

нет, для времен после 27 октября будет +3, до – +4. постгрес берет дату и время в utc, смотрит в tzdata какое смещение было в эту дату и выводит с соответствующим смещением.

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

подтверждаю... тоесть идея метки времени заключаеться в том, чтобы отображать при селекте и принимать при записи то время, которое нормальный человек видел на нормальных часах живущих в тех же временых условиях, что и текущая настройка локализации вплане времени
...
Рейтинг: 0 / 0
Как обновить таймзону у записи
    #38791740
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а то было бы странно, если ты постоянно в 1000 в блог пишешь я пошол на работу, а оно тебе покажет что пол года ты ходишь на работу в 1000 а вторую половину в 900
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как обновить таймзону у записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]