Recreating indices safely
Hello,
I have quite strange problem with 7.1.3.
The problem is that when I try to recreate indices in working system
(it is needed as updates are quite intensive, and you need to make indices
smaller) I realise that some queries using these indices are failed.
They are failed with error something like can not find relation <oid>.
This is understandable. Query was prepared, all oids was fixed, and between
query prepare, and execution I drop the index (I create a new one, and drop an old
one afterwards). As far as I can understand drop index should obtain exclusive lock
on table it is created on. Is it correct? The only explanation I can find is that this lock
is not obtained.
Any suggestions/comments/ideas?
BTW, using begin; lock table; create index;drop index;commit; is not working, as
create index can not detect that table is already locked by current transaction, and tries to lock it again...
This is also bug IMHO.
--
Sincerely Yours,
Denis Perchine
----------------------------------
E-Mail: dyp@perchine.com
HomePage: http://www.perchine.com/dyp/
FidoNet: 2:5000/120.5
----------------------------------
Denis Perchine <dyp@perchine.com> writes:
BTW, using begin; lock table; create index;drop index;commit; is not working,
??
regression=# create table foo (f1 text);
CREATE
regression=# create index fooi1 on foo(f1);
CREATE
regression=# begin;
BEGIN
regression=# lock table foo;
LOCK TABLE
regression=# create index fooi2 on foo(f1);
CREATE
regression=# drop index fooi1;
DROP
regression=# end;
COMMIT
Please define "not working".
regards, tom lane
On Wednesday 19 September 2001 11:25, Tom Lane wrote:
Denis Perchine <dyp@perchine.com> writes:
BTW, using begin; lock table; create index;drop index;commit; is not
working,??
regression=# create table foo (f1 text);
CREATE
regression=# create index fooi1 on foo(f1);
CREATE
regression=# begin;
BEGIN
regression=# lock table foo;
LOCK TABLE
regression=# create index fooi2 on foo(f1);
CREATE
regression=# drop index fooi1;
DROP
regression=# end;
COMMITPlease define "not working".
Hmmm... I got deadlock detected... Something was interfered as well...
--
Sincerely Yours,
Denis Perchine
----------------------------------
E-Mail: dyp@perchine.com
HomePage: http://www.perchine.com/dyp/
FidoNet: 2:5000/120.5
----------------------------------
On Wednesday 19 September 2001 11:25, Tom Lane wrote:
Denis Perchine <dyp@perchine.com> writes:
BTW, using begin; lock table; create index;drop index;commit; is not
working,??
regression=# create table foo (f1 text);
CREATE
regression=# create index fooi1 on foo(f1);
CREATE
regression=# begin;
BEGIN
regression=# lock table foo;
LOCK TABLE
regression=# create index fooi2 on foo(f1);
CREATE
regression=# drop index fooi1;
DROP
regression=# end;
COMMITPlease define "not working".
Hmmm... I got deadlock detected... Something was interfered as well...
BTW, also sometimes I get the following message which really intrigues me.
ERROR: Index 8734149 does not exist
When I restart my application it just disappears... Is it possible, that backends loose
information about updated indices? And how can I debug/detect this?
--
Sincerely Yours,
Denis Perchine
----------------------------------
E-Mail: dyp@perchine.com
HomePage: http://www.perchine.com/dyp/
FidoNet: 2:5000/120.5
----------------------------------