Разница между CURRENT_TIMESTAMP и clock_timestamp() и как их использовать во многих реляционных базах данных, включая PostgreSQL, SQL Server, Firebird, IBM DB2 и MySQL, и это лишь некоторые из них. который фиксирует начало транзакции. Важно помнить, что для каждой транзакции существует только одна запись, поэтому, если у вас есть длительная транзакция, вы не увидите, как он меняется по ходу дела.
clock_timestamp() — это функция PostgreSQL, которая всегда возвращает текущую метку времени. Я не думаю, что я один использую его для простого бенчмаркинга и других вещей. где, например, мне нужно записать тайминги каждой части функции внутри функции, используя простые операторы отладочной печати RAISE NOTICE.
Есть еще один классный способ, который мне нравится использовать, и это для пакета записей, каждый из которых требует дорогостоящего вызова функции, сравнительный анализ того, сколько времени требуется для обработки каждой записи. Одна из вещей, над которыми я работаю, — это повышение скорости работы tiger_geocoder, входящего в состав PostGIS 2.
Таким образом, вместо того, чтобы перебирать каждую запись в цикле, я подумал, что было бы здорово, если бы я мог запустить пакет, но для каждой записи он сообщал бы мне, сколько времени потребовалось для обработки относительно остальных, чтобы я мог получить представление о том, как выглядит проблемный адрес. Поэтому я написал этот запрос:
WITH ctbenchmark КАК (ВЫБИРАТЬ *, the_time - COALESCE(lag(the_time) OVER(ORDER BY the_time), CURRENT_TIMESTAMP) As process_time, the_time — CURRENT_TIMESTAMP Как diff_from_start ОТ (ВЫБЕРИТЕ адрес_1, город, штат, почтовый индекс, pprint_addy(normalize_address(coalesce(address_1,'') || ', ' || объединение(город || ' ','') || состояние || ' ' || zip)) Как pp_addr, clock_timestamp() как the_time FROM testgeocode LIMIT 1000) Как foo ) ВЫБИРАТЬ * ОТ ctbenchmark ГДЕ время_процесса > '00:00:00. 016'::интервал;
Что вернуло что-то вроде этого:
адрес_1 | город | состояние | почтовый индекс | pp_addr | время | процесс_время | diff_from_start ------------------+------------+--------+------- +-- --------------------------------------------------------+-------- ------+---- 48 ГЛАВНАЯ СТ.. | С.. | Массачусетс | 021.. | 48 ГЛАВНАЯ .. | 2011-05-10 03:24:43.078-04 | 00:00:00.032 | 00:00:00.032 15 ... | | Массачусетс | 018... | 15 ЗЕЛЕНЫЙ... | 2011-05-10 03:24:50.796-04 | 00:00:00.031 | 00:00:07.75
Функции даты и времени PostgreSQL
На этой странице перечислены функции даты и времени, которые можно использовать для управления временными значениями в PostgreSQL.
возраст
Функция PostgreSQL
age()
вычисляет возраст в соответствии с указанным днем рождения и возвращает возраст в форматеx лет x месяцев x дней
.clock_timestamp
PostgreSQL
функция clock_timestamp()
возвращает дату и время выполнения этой функции. Два выполненияclock_timestamp()
могут возвращать разные значения.текущая дата
Функция PostgreSQL
current_date
возвращает текущую системную дату в форматеГГГГ-ММ-ДД
.Текущее время
Функция PostgreSQL
current_time
возвращает системное время с информацией о часовом поясе в форматеЧЧ:ММ:СС.сссссс{+|-}ZZ
.текущая_временная метка
Функция PostgreSQL
current_timestamp()
возвращает текущую дату и время (начало текущей транзакции).date_bin
Функция PostgreSQL
date_bin()
усекает указанную отметку времени до начала ближайшего указанного интервала.дата_часть
PostgreSQL
date_part() 9Функция 0039 извлекает указанное поле из указанной метки времени или интервала и возвращает результат.
date_trunc
Функция PostgreSQL
date_trunc()
усекает указанную отметку времени или значение интервала до указанной части и возвращает результат.извлекать
Функция Extract() PostgreSQL
извлекает указанное поле из указанной метки времени или интервала времени и возвращает его.
конечный
Функция PostgreSQL
isfinite()
определяет, является ли заданное значение даты, временной метки или интервала конечным.justify_days
Функция postgreSQL
justify_days()
преобразует представление интервалов времени, преобразовывая количество дней за 30 дней в количество месяцев.justify_hours
PostgreSQL
justify_hours()
Функция преобразует представление временных интервалов, переводя часы свыше 24 часов в дни.justify_interval
Функция postgreSQL
justify_interval()
преобразует представление временных интервалов, преобразуя часы свыше 24 часов в дни, а дни свыше 30 дней — в месяцы.местное время
Функция PostgreSQL
localtime
возвращает текущее системное время в форматеЧЧ:ММ:СС.сссссссс
.местная временная метка
Функция PostgreSQL
localtimestamp()
возвращает системную дату и время начала транзакции.make_date
Функция PostgreSQL
создает дату из заданных полей года, месяца и дня. make_date()make_interval
Функция PostgreSQL
make_interval()
создает значение интервала из заданных полей года, месяца, дня, часа, минуты и секунды.make_time
Функция PostgreSQL
make_time()
создает время из заданных полей часа, минуты и секунды.make_timestamp
Функция PostgreSQL
make_timestamp()
создает значение метки времени из заданных полей года, месяца, дня, часа, минуты и секунды.make_timestamptz
Функция PostgreSQL
make_timestamptz()
создает значение метки времени из заданных полей года, месяца, дня, часа, минуты, секунды и часового пояса.сейчас
Функция PostgreSQL
now()
возвращает системную дату и время начала текущей транзакции.pg_sleep
Функция PostgreSQL
pg_sleep()
приостанавливает выполнение текущего серверного процесса на указанное количество секунд.pg_sleep_for
Функция PostgreSQL
pg_sleep_for()
получает параметр интервала, который приостанавливает выполнение текущего серверного процесса на указанный интервал.pg_sleep_until
Функция PostgreSQL
pg_sleep_until()
получает значение метки времени и приостанавливает выполнение текущего серверного процесса до указанного момента.метка_времени_оператора
Функция PostgreSQL
statement_timestamp()
возвращает метку времени начала выполнения текущего оператора.время дня
PostgreSQL
timeofday() 9Функция 0039 возвращает строку, представляющую отметку времени выполнения этой функции.
на сегодняшний день
Функция PostgreSQL
to_date()
преобразует указанную строку в значение даты в соответствии с заданным форматом.