invalid tid errors in latest 7.3.4 stable.

Поиск
Список
Период
Сортировка
От Wade Klaver
Тема invalid tid errors in latest 7.3.4 stable.
Дата
Msg-id 200309231713.11458.archeron@wavefire.com
обсуждение исходный текст
Ответы Re: invalid tid errors in latest 7.3.4 stable.  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hello folks,

Stumbled across an odd problem while cleaning data out of a database.  I am 
getting these "invalid tid" errors.  I tried the upgrade from 7.3.2 to 7.3.4.  
I tried a dumpall/initdb/restore... nadda.  Nothing really usefull is coming 
from the logs either, even though logging is cranked up.  If anyone can 
suggest a method to track down the cause of the following dialog with the db, 
I would greatly appreciate it.  If you need any more info, please just ask.
Thank you in advance.-Wade

                              version                               
---------------------------------------------------------------------PostgreSQL 7.3.4 on i386-unknown-freebsd4.6,
compiledby GCC 2.95.4
 
(-STABLE cvs from today)

dropsites=# begin;
BEGIN
dropsites=# delete from te_users where id = 954;
WARNING:  Error occurred while executing PL/pgSQL function c_delete_categories
WARNING:  line 14 at SQL statement
ERROR:  heap_mark4update: (am)invalid tid
dropsites=# rollback;  
ROLLBACK
                                       Table "public.te_users"     Column       |            Type             |
            
 
Modifiers                      
-------------------+-----------------------------+-----------------------------------------------------id
| integer                     | not null default 
 
nextval('"te_users_id_seq"'::text)username          | text                        | not nullpassword          | text
                   | reseller          | integer                     | not null default 0directory         | text
                | contact           | integer                     | creation_date     | timestamp with time zone    |
defaultnow()active            | boolean                     | not null default 'f'domain            | integer
         | not null default 0has_domain        | boolean                     | not null default 'f'tutorial_type     |
integer                    | default -1tutorial_step     | integer                     | default -1license_agreement |
boolean                    | default 'f'use_header        | integer                     | default 0promo             |
boolean                    | not null default 'f'last_billed       | timestamp without time zone | default now()
 
Indexes: primary_fk primary key btree (username, "domain"),        te_users_id_key unique btree (id),
te_users_username_lower_idxbtree (lower(username))
 

dropsites=# \d c_categories                             Table "public.c_categories"  Column    |  Type   |
           Modifiers                           
 
-------------+---------+--------------------------------------------------------------id          | integer | not null
default
 
nextval('public.c_categories_id_seq'::text)category    | integer | not null default 0userid      | integer | not
nullform       | integer | not nullname        | text    | description | text    | lft         | integer | rgt
|integer | level       | integer | parentid    | integer | 
 
Indexes: c_categories_id_key unique btree (id)
Foreign Key constraints: $1 FOREIGN KEY (userid) REFERENCES te_users(id) ON 
UPDATE NO ACTION ON DELETE CASCADE,                        $2 FOREIGN KEY (form) REFERENCES c_forms(id) ON 
UPDATE NO ACTION ON DELETE CASCADE,                        c_categories_fk FOREIGN KEY (parentid) REFERENCES 
c_categories(id) ON UPDATE NO ACTION ON DELETE SET DEFAULT,                        c_categories_cat_fk FOREIGN KEY
(category)REFERENCES 
 
c_categories(id) ON UPDATE NO ACTION ON DELETE NO ACTION



--- Source of c_delete_categories ---
CREATE OR REPLACE FUNCTION c_delete_categories() returns TRIGGER AS '
 begin   IF c_category_mutex() THEN     -- delete entry     DELETE FROM c_categories WHERE ID = old.id;          IF
(old.rgt- old.lft) > 1 THEN       -- update children       UPDATE c_categories SET ParentID = old.parentid WHERE
ParentID= 
 
old.id;       UPDATE c_categories SET lft = lft - 1, rgt = rgt - 1, level = level - 
1 WHERE lf
t > old.lft AND lft < old.rgt;     END IF;
     -- remove extra space     UPDATE c_categories SET lft = lft - 2 WHERE lft > old.rgt;     UPDATE c_categories SET
rgt= rgt - 2 WHERE rgt > old.rgt;     PERFORM c_category_clear_mutex();     return NULL;   else     return old;   END
IF;end;
 
' language 'plpgsql';

--- source of c_category_mutex ---
CREATE OR REPLACE FUNCTION c_category_mutex() returns BOOL AS ' DECLARE   mutex_count integer; BEGIN 
   SELECT INTO mutex_count COUNT(*) FROM pg_class c, pg_attribute a     WHERE a.attrelid = c.oid       AND c.relname =
''___c_category_mutex___''      AND a.attname = ''___c_category_mutex___''       AND pg_catalog.pg_table_is_visible (
c.oid);     IF mutex_count > 0 THEN     RETURN ''f'';   ELSE     CREATE TEMP TABLE ___c_category_mutex___
(___c_category_mutex___INT2);     RETURN ''t'';   END IF; END;' LANGUAGE 'plpgsql';
 


--- source of c_category_clear_mutex ---
CREATE OR REPLACE FUNCTION c_category_clear_mutex() returns BOOL AS ' DECLARE   mutex_count         INT4; BEGIN
   SELECT INTO mutex_count COUNT(*) FROM pg_class c, pg_attribute a     WHERE a.attrelid = c.oid       AND c.relname =
''___c_category_mutex___''      AND a.attname = ''___c_category_mutex___''       AND pg_catalog.pg_table_is_visible (
c.oid);     IF mutex_count > 0 THEN     DROP TABLE ___c_category_mutex___;     RETURN ''t'';   ELSE     RETURN ''f'';
ENDIF;
 
 END;' LANGUAGE 'plpgsql';


-- 
Wade Klaver
Wavefire Technologies Corporation
GPG Public Key at http://archeron.wavefire.com

/"\   ASCII Ribbon Campaign  .
\ / - NO HTML/RTF in e-mail  .X  - NO Word docs in e-mail .
/ \ -----------------------------------------------------------------



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Samuel A Horwitz
Дата:
Сообщение: ecpg build on AIX 4.2.1
Следующее
От: Irina Sourikova
Дата:
Сообщение: bug in vacuumlo?