Ошибка сохранения часового пояса в Postgresql

Пытаясь сохранить дату в PostgreSQL, используя Python, он дает мне UTC + 2 для моего часового пояса, в то время как это UTC + 1 (не обращайте внимания на разницу, я просто использовал тест Python, чтобы узнать, каков часовой пояс)

In [8]: datetime.datetime.now(pytz.timezone("Africa/Algiers"))
Out[8]: datetime.datetime(2018, 7, 7, 15, 27, 43, 756977, tzinfo=<DstTzInfo 'Africa/Algiers' CET+1:00:00 STD>)

На PostgreSQL я получаю

2018-07-07 14:28:04.144505+02

часовой пояс отличается

Это как postgresql добавляет летнее время, а у нас его нет в Алжире?

NB: я использую asyncpg

1 ответ

Решение

Основываясь на ответе Раймонда Нейланда, который сработал, вот как (из PGAdmin 4). Причина в том, что ОС вынуждает свой собственный часовой пояс и не сохраняет тот, который дал ему Python.

Просто запустите эти три команды из командной строки SQL:

Чтобы узнать, какой часовой пояс использует PG,

SHOW timezone ;

Чтобы получить все доступные часовые пояса и как PG называет их

SELECT * FROM pg_timezone_names ;

Поставить правильный часовой пояс

ALTER DATABASE yourDataBase SET timezone TO 'Africa/Algiers';

Перезапустите сервис

sudo systemctl restart postgresql-10.service 

NB: даже если вы используете moment.js вам нужно добавить .zone(+0100) как упомянуто здесь

Другие вопросы по тегам