Dan Armbrust <daniel.armbrust.list@gmail.com> writes:
> I have a java application that is trying to dynamically drop a set of
> tables. Problem is, when it gets to a particular table and I execute
> the "drop table foo cascade" command from a prepared statement, the
> query never returns. It just hangs indefinitely. I presume that it is
> waiting on a lock for this table, but there is nothing that I know of
> that should be locking this table.
> So, I have two issues - the first, how do I prevent myself from hanging
> indefinitely? I tried 'setQueryTimeout' on the prepared statement, but
> it doesn't seem to have any effect. Still hangs indefinitely.
You should complain to the JDBC list about that. The underlying backend
facility works as expected:
session 1:
regression=# create table foo (f int);
CREATE TABLE
regression=# begin;
BEGIN
regression=# lock table foo;
LOCK TABLE
session 2:
regression=# set statement_timeout TO 1000;
SET
regression=# drop table foo cascade;
... after a second ...
ERROR: canceling statement due to statement timeout
regression=#
> The second, how can I track down what is locking this table?
Look in pg_locks to start with.
regards, tom lane