Есть ли в 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
преобразовать временную метку в этот часовой пояс для отображения.