|
|
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, из-за криворукости админов мы вынуждены проапдейтить старые записи, указав им новую таймзону. Вопрос: как правильно написать апдейт для поля типа timestamp(6) with time zone чтобы у него поменялась только тайм зона? То есть было: 2012-10-26 11:37:45+04 А стало: 2012-10-26 11:37:45+03 Для всех записей, созданных до 27.10.2014 Спасибо заранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 11:01:14 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
Sean York, все записи с типом timestamp with time zone, хранят внутри у себя только время в UTC, никаких таймзон там нет. при запросе таких записей база берет свою текущую таймзону и приводит время к ней. То есть было: 2012-10-26 11:37:45+04 А стало: 2012-10-26 11:37:45+03 такой ситуации по идее вообще быть никак не должно (одинаковое время, но разное смещение), если вручную ничего не менять. если время вставилось кривое из внешнего источника, то нужно к нему добавить/отнять сколько надо часов. а для обновления таймзон в связи с последними изменениями часовых поясов ничего трогать не нужно, достаточно обновить tzdata и сделать рестарт баз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 11:20:38 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
Alexius, если открыть старые записи, то они отображаются с таймзоной +4, новые сохраняются с таймзоной +3. Это криворукость админов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 11:57:56 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
Sean York, нет, так и должно быть. таймзона одинаковая, а смещение в разное время может быть разным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 12:27:10 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
Похоже у меня та же ситуация. Обновили 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. "Europe/Moscow" Код: sql 1. 2. 3. 4. "Europe/Moscow""MSK""03:00:00"f"posix/Europe/Moscow""MSK""03:00:00"f ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 12:52:38 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
похоже надо прояснить ситуацию поле с таймзоной А, и поле без таймзоны Б на сервере стоит зона +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 =========== итого, метка времени(время с тайм зоной) это тип, который преобрабатываеться при чтении записи при записи, сервер учитывая текущую таймзону, вычисляет время ютс, и сохраняет в ютс при чтении проиходит обратный процес. ЗЫ видели на форумах, помоему на сдешнем тоже такое есть - задишь, и видешь что ктото комент оставил из будущего(время комента больше чем сейчас) вот для этого и существует тип - метка времени, когда сохраняеться абсолютное время, и потом при выдаче всегда перещитываеться. тоесть правильная работа форума или чего подобного. получаем запрос от браузера, при подключении к базе, выставляем для подключения временую зону пользователя, и чтобы юзер не записывал в базу или не читал...путаницы с часами не выйдет. если петя из штатотв на минуту раньше коли из франции вставил комент, и через минут юзеры из всех таймзон зашли почитать ...все юзеры увидят два комента, один на минуту раньше чем у них виндоус в углу время показывает, другой комент из штатов - на две минуты раньше чем из комп показывает внизу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 13:18:31 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, спасибо за ответ. Без зоны - все ясно. Я также понимаю, что timestamptz хранит время в UTC. Но не понимаю почему при селекте он показывает по-разному. У меня два строки - в одной дата до 214-10-16 в другой после. Я делаю селект: в одной строке показывает +4 в другой +3. По идее он же обе строки должен показывать в +3 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 13:26:09 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
DimmaNНо не понимаю почему при селекте он показывает по-разному. У меня два строки - в одной дата до 214-10-16 в другой после. Я делаю селект: в одной строке показывает +4 в другой +3. По идее он же обе строки должен показывать в +3 ? нет, для времен после 27 октября будет +3, до – +4. постгрес берет дату и время в utc, смотрит в tzdata какое смещение было в эту дату и выводит с соответствующим смещением. таким образом, если например каждый день в базу в одно и тоже время (местное) вставляется запись, то и в выборке будет всегда одно и тоже время, но с разным смещением (при смене часового пояса или переходе на летнее время). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 13:38:35 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
Alexiusнет, для времен после 27 октября будет +3, до – +4. постгрес берет дату и время в utc, смотрит в tzdata какое смещение было в эту дату и выводит с соответствующим смещением. тогда понятно. да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 13:43:13 |
|
||
|
Как обновить таймзону у записи
|
|||
|---|---|---|---|
|
#18+
AlexiusDimmaNНо не понимаю почему при селекте он показывает по-разному. У меня два строки - в одной дата до 214-10-16 в другой после. Я делаю селект: в одной строке показывает +4 в другой +3. По идее он же обе строки должен показывать в +3 ? нет, для времен после 27 октября будет +3, до – +4. постгрес берет дату и время в utc, смотрит в tzdata какое смещение было в эту дату и выводит с соответствующим смещением. таким образом, если например каждый день в базу в одно и тоже время (местное) вставляется запись, то и в выборке будет всегда одно и тоже время, но с разным смещением (при смене часового пояса или переходе на летнее время). подтверждаю... тоесть идея метки времени заключаеться в том, чтобы отображать при селекте и принимать при записи то время, которое нормальный человек видел на нормальных часах живущих в тех же временых условиях, что и текущая настройка локализации вплане времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2014, 14:37:25 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=120&tid=1998388]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 361ms |

| 0 / 0 |
