Как прокомментировано a_horse_with_no_name , то, что вы видите в pgadmin, это обычные блокировки, а не взаимоблокировки .
PostgreSQL предоставляет различные режимы блокировки для управления одновременным доступом к данным в таблицах. Эти режимы могут использоваться для управляемой приложением блокировки в ситуациях, когда MVCC не дает желаемого поведения. Кроме того, большинство команд PostgreSQL автоматически получают блокировки соответствующих режимов, чтобы гарантировать, что ссылочные таблицы не будут удалены или изменены несовместимыми способами во время выполнения команды.
blockquote>Экран в pgadmin, вероятно, основан на представлении системы
pg_lock
.Блокировки происходят в обычном процессе любой базы данных. Вы не хотите регулярно прерывать сеансы, которые генерируют блокировки, потому что это может по-разному повлиять на ваше приложение и базу данных. Вместо этого вы, вероятно, хотите идентифицировать (возможно, используя представление
pg_lock
), проанализировать и оптимизировать запросы, вызывающие проблемы.Когда дело доходит до концепции тупика : это особая ненормальная ситуация, которая может возникнуть при использовании блокировки, когда два сеанса взаимно ожидают другого. Они обычно указывают на проблемы в логике приложения.
Большинство СУБД автоматически идентифицируют и разрешают такую ситуацию блокировки, и Postgres не является исключением :
PostgreSQL автоматически обнаруживает тупиковые ситуации и разрешает их, прерывая одну из транзакции, позволяющие другим (их) завершить. (Точно, какая транзакция будет прервана, трудно предсказать, и на нее не следует полагаться.)
blockquote>
SELECT date1 - date2
FROM some_table
возвраты различие в днях. Умножьтесь на 24, чтобы заставить различие в часах и 24*60 получать минуты. Так
SELECT (date1 - date2) * 24 * 60 difference_in_minutes
FROM some_table
должен быть тем, что Вы ищете
По умолчанию вычитание даты оракула возвращает результат в # дней.
Поэтому просто умножаются на 24 для получения # часов, и снова 60 для # минут.
Пример:
select
round((second_date - first_date) * (60 * 24),2) as time_in_minutes
from
(
select
to_date('01/01/2008 01:30:00 PM','mm/dd/yyyy hh:mi:ss am') as first_date
,to_date('01/06/2008 01:35:00 PM','mm/dd/yyyy HH:MI:SS AM') as second_date
from
dual
) test_data
http://asktom.oracle.com/tkyte/Misc/DateDiff.html - ссылка, мертвая с 30.01.2012
, Похожа, это - ресурс:
http://asktom.oracle.com/pls/asktom/ASKTOM.download_file?p_file=6551242712657900129