Есть ли в postgres эквивалентная функция, такая как systimestamp() oracle?

Я работаю над проектом переноса базы данных от оракула к postgresql. Мне нужно прочитать дату и время операционной системы из postgres. В oracle sysdate() возвращает системную дату и время в данных типа даты, а systimestamp() возвращает данные типа временной метки независимо от установленной переменной time_zone. Но в postgres current_date() и current_timestamp() всегда дают результат относительно переменной часового пояса, установленной для этой базы данных. Синхронизация переменной часового пояса (т.е. set timezone='utc') - это один из способов, но я не хочу, чтобы моя переменная часового пояса изменялась.

Все, что я хочу получить, это текущая дата и время моей системы (часовой пояс может включать или нет), как в оракуле. Любой pl/pgsql был бы полезен. Спасибо

1 ответ

Тип данных TIMESTAMP WITH TIME ZONE отличается в Oracle и PostgreSQL.
В то время как Oracle хранит информацию о метке времени вместе с меткой времени, PostgreSQL хранит метку времени в формате UTC и отображает ее в текущем установленном часовом поясе (доступно с помощью оператора SQL). SHOW TimeZone).

Таким образом, функции возвращают одинаковое время в PostgreSQL и Oracle, но это отображается по-разному. Обычно это не должно быть проблемой.

Если вам действительно нужно хранить информацию о часовом поясе вместе с отметкой времени, вам придется использовать отдельное поле для хранения информации о часовом поясе. Вы можете использовать AT TIME ZONE преобразовать временную метку в этот часовой пояс для отображения.

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