Thread: Strange behavior: row won't delete

Strange behavior: row won't delete

From
Phoenix Kiula
Date:
HI. I made a small alteration to a table (added a column).

Now when I do:

  vacuum analyze TABLENAME

or

  delete from TABLENAME where id = 99

Nothing happens! The carriage return means the my shell cursor goes to
the next line, but it just stays there. I thought something may be
happening silently but it has been sitting this way since an hour.

How can I debug this? Nothing in the logs at all.

Re: Strange behavior: row won't delete

From
Tom Lane
Date:
Phoenix Kiula <phoenix.kiula@gmail.com> writes:
> Now when I do:
>   vacuum analyze TABLENAME
> or
>   delete from TABLENAME where id = 99
> Nothing happens! The carriage return means the my shell cursor goes to
> the next line, but it just stays there.

Did you forget the semicolon?

            regards, tom lane

Re: Strange behavior: row won't delete

From
Alan Hodgson
Date:
On Tuesday 03 March 2009, Phoenix Kiula <phoenix.kiula@gmail.com> wrote:
> HI. I made a small alteration to a table (added a column).
>
> Now when I do:
>
>   vacuum analyze TABLENAME
>
> or
>
>   delete from TABLENAME where id = 99
>
> Nothing happens! The carriage return means the my shell cursor goes to
> the next line, but it just stays there. I thought something may be
> happening silently but it has been sitting this way since an hour.
>
> How can I debug this? Nothing in the logs at all.

commit the transaction where you altered the table. It has an open lock on
the table.

--
Even a sixth-grader can figure out that you can’t borrow money to pay off
your debt

Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
On Wed, Mar 4, 2009 at 12:10 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Phoenix Kiula <phoenix.kiula@gmail.com> writes:
>> Now when I do:
>>   vacuum analyze TABLENAME
>> or
>>   delete from TABLENAME where id = 99
>> Nothing happens! The carriage return means the my shell cursor goes to
>> the next line, but it just stays there.
>
> Did you forget the semicolon?



Cute. But no :)


myuser=#   delete from visitcount where id = 99;

Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
> commit the transaction where you altered the table. It has an open lock on
> the table.



=# commit;

WARNING:  there is no transaction in progress
COMMIT
Time: 0.282 ms


So no, there's nothing pending.

Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
Although when I try this:

select pg_class.relname,pg_locks.* from pg_class,pg_locks where
pg_class.relfilenode=pg_locks.relation;

There are many rows!

How can I get rid of these open locks?

Re: Strange behavior: row won't delete

From
Adrian Klaver
Date:
----- "Phoenix Kiula" <phoenix.kiula@gmail.com> wrote:

> > commit the transaction where you altered the table. It has an open
> lock on
> > the table.
>
>
>
> =# commit;
>
> WARNING:  there is no transaction in progress
> COMMIT
> Time: 0.282 ms
>
>
> So no, there's nothing pending.
>
> --

Are you connected to the right database?. I have been in that situation, looking at the log for db A and doing things
indb B. 

Adrian Klaver
aklaver@comcast.net



Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
On Wed, Mar 4, 2009 at 12:36 AM, Adrian Klaver <aklaver@comcast.net> wrote:
>
> Are you connected to the right database?. I have been in that situation, looking at the log for db A and doing things
indb B. 


Thanks. I only have one database, so yes I am connected to it.

I have the lock file in /tmp:    .s.PGSQL.5432.lock

Should I delete this file?

Re: Strange behavior: row won't delete

From
Adrian Klaver
Date:
----- "Phoenix Kiula" <phoenix.kiula@gmail.com> wrote:

> On Wed, Mar 4, 2009 at 12:36 AM, Adrian Klaver <aklaver@comcast.net>
> wrote:
> >
> > Are you connected to the right database?. I have been in that
> situation, looking at the log for db A and doing things in db B.
>
>
> Thanks. I only have one database, so yes I am connected to it.
>
> I have the lock file in /tmp:    .s.PGSQL.5432.lock
>
> Should I delete this file?

No, that is the lock file for the entire cluster.

Adrian Klaver
aklaver@comcast.net

Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
I guess my question is, how should I remove all pending locks on a
table so that I can get on with the rest of the stuff?

I mean, even if I can now find an offending RULE on the table, I
cannot replace or remove it. '

Thanks for any pointers!

Re: Strange behavior: row won't delete

From
Tom Lane
Date:
Phoenix Kiula <phoenix.kiula@gmail.com> writes:
> How can I get rid of these open locks?

Close the transactions that are holding them.  Look into
pg_stat_activity and pg_prepared_xacts.

            regards, tom lane

Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
On Wed, Mar 4, 2009 at 1:17 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Phoenix Kiula <phoenix.kiula@gmail.com> writes:
>> How can I get rid of these open locks?
>
> Close the transactions that are holding them.  Look into
> pg_stat_activity and pg_prepared_xacts.


Thanks for this. But can I simply delete all the pg_locks table? Or
delete all rows in pg_stat_activity? In my case the _xacts table is
empty. Ideally I don't want to lose pg_stat_activity. I just want to
change a RULE on a table. Is there any place I can do that?

Re: Strange behavior: row won't delete

From
Phoenix Kiula
Date:
On Wed, Mar 4, 2009 at 1:23 AM, Phoenix Kiula <phoenix.kiula@gmail.com> wrote:
> On Wed, Mar 4, 2009 at 1:17 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Phoenix Kiula <phoenix.kiula@gmail.com> writes:
>>> How can I get rid of these open locks?
>>
>> Close the transactions that are holding them.  Look into
>> pg_stat_activity and pg_prepared_xacts.
>
>
> Thanks for this. But can I simply delete all the pg_locks table? Or
> delete all rows in pg_stat_activity? In my case the _xacts table is
> empty. Ideally I don't want to lose pg_stat_activity. I just want to
> change a RULE on a table. Is there any place I can do that?
>



I found 232 rows in pg_stat_activity of offending "current_query". How
can I delete them?

----
=# delete from  pg_stat_activity where current_query like 'UPDATE visitcount%';
ERROR:  cannot delete from a view
HINT:  You need an unconditional ON DELETE DO INSTEAD rule
----

Thanks!

Re: Strange behavior: row won't delete

From
Gregory Stark
Date:
Phoenix Kiula <phoenix.kiula@gmail.com> writes:

> I guess my question is, how should I remove all pending locks on a
> table so that I can get on with the rest of the stuff?
>
> I mean, even if I can now find an offending RULE on the table, I
> cannot replace or remove it. '

You're off on the wrong track. Locks are held by transactions until the
transaction commits. You need to find the transactions which are holding these
locks and either commit or roll them back.

You look in pg_locks to see what locks transactions are holding. In particular
look for rows with "granted" set to "t", especially locks on relations and
especially ExclusiveLocks.

Then you take the pid of those transactions and look in pg_stat_activity to
see what they're up to. If they say "<idle in transaction>" then they're
waiting for the client to do something. If they stay that way for any length
of time while holding locks which block other transactions that's bad.

Alternately if you see a query in pg_stat_transaction which is taking a long
time to run you might check whether you have a bad plan or a bad query running
while holding locks effectively doing the same thing.

--
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com
  Ask me about EnterpriseDB's RemoteDBA services!