not finding rows using ctid

Started by AI Rummanover 11 years ago4 messagesgeneral
Jump to latest
#1AI Rumman
rummandba@gmail.com

Hi,

I am getting the logs as follows:

LOG: process 32145 acquired ExclusiveLock on tuple (153420,5) of relation
663326 of database 475999 after 1123.028 ms

But, when I am executing sqls to find the row on that table using the ctid
= '(153420,5)', I get no rows.

Any idea, why?

Thanks.

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: AI Rumman (#1)
Re: not finding rows using ctid

On 08/07/2014 12:40 PM, AI Rumman wrote:

Hi,

I am getting the logs as follows:

LOG: process 32145 acquired ExclusiveLock on tuple (153420,5) of
relation 663326 of database 475999 after 1123.028 ms

But, when I am executing sqls to find the row on that table using the
ctid = '(153420,5)', I get no rows.

Any idea, why?

http://www.postgresql.org/docs/9.3/static/ddl-system-columns.html
"ctid

The physical location of the row version within its table. Note
that although the ctid can be used to locate the row version very
quickly, a row's ctid will change if it is updated or moved by VACUUM
FULL. Therefore ctid is useless as a long-term row identifier. The OID,
or even better a user-defined serial number, should be used to identify
logical rows."

Something changed the row between the time you saw it in the log and the
time you did the query.

Thanks.

--
Adrian Klaver
adrian.klaver@aklaver.com

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

#3AI Rumman
rummandba@gmail.com
In reply to: Adrian Klaver (#2)
Re: not finding rows using ctid

I didn't execute any Vacuum Full and I tried to get the row after 3 hours
of the issue.

Thanks.

On Thu, Aug 7, 2014 at 1:51 PM, Adrian Klaver <adrian.klaver@aklaver.com>
wrote:

Show quoted text

On 08/07/2014 12:40 PM, AI Rumman wrote:

Hi,

I am getting the logs as follows:

LOG: process 32145 acquired ExclusiveLock on tuple (153420,5) of
relation 663326 of database 475999 after 1123.028 ms

But, when I am executing sqls to find the row on that table using the
ctid = '(153420,5)', I get no rows.

Any idea, why?

http://www.postgresql.org/docs/9.3/static/ddl-system-columns.html
"ctid

The physical location of the row version within its table. Note that
although the ctid can be used to locate the row version very quickly, a
row's ctid will change if it is updated or moved by VACUUM FULL. Therefore
ctid is useless as a long-term row identifier. The OID, or even better a
user-defined serial number, should be used to identify logical rows."

Something changed the row between the time you saw it in the log and the
time you did the query.

Thanks.

--
Adrian Klaver
adrian.klaver@aklaver.com

#4Adrian Klaver
adrian.klaver@aklaver.com
In reply to: AI Rumman (#3)
Re: not finding rows using ctid

On 08/07/2014 02:14 PM, AI Rumman wrote:

I didn't execute any Vacuum Full and I tried to get the row after 3
hours of the issue.

Also, "...a row's ctid will change if it is updated..."

Thanks.

--
Adrian Klaver
adrian.klaver@aklaver.com

--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general