Re: pg_dumpall problem - duplicated users

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tom Lane napisał(a):

Bartosz Nowak <grubby@xxxxxx> writes:
postgres=> select ctid,xmin,xmax,cmin,xmax,* from pg_shadow where usename = 'postgres'; ctid | xmin | xmax | cmin | xmax | usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig --------+------------+-------+-------+-------+----------+----------+-------------+----------+-----------+-------------------------------------+----------+-----------


(0,1) | 1 | 50469 | 50469 | 50469 | postgres | 1 | t | t | t | | | (1,25) | 2559800612 | 0 | 0 | 0 | postgres | 1 | t | t | t | md5c084502ed11efa9d3d96d29717a5e555 | |
(2 rows)


Hmm --- clearly, that second xmin is corrupt.  I'd venture that this
is the result of a rolled-back (crashed?) ALTER USER SET PASSWORD
operation, in which somehow the new tuple's xmin got clobbered ... and
more than likely, its XMIN_COMMITTED bit got set at the same time.

You could manually delete either row, probably better to zap the second
one:
    delete from pg_shadow where ctid = '(1,25)';
and then things should be OK.  A dump and reload wouldn't be a bad idea
though, since there may be other corruption elsewhere that you haven't
noticed yet.

            regards, tom lane
Heh... i wish it was that easy - i tried it already :] When i delete the 'second' postgres user (with passwd set) PG is acting like there is no postgres account at all:

pg_dumpall -i -U mw > test.sql
pg_dump: SQL command failed
pg_dump: Error message from server: ERROR: pg_class_aclcheck: invalid user id 1 pg_dump: The command was: SELECT (SELECT usename FROM pg_user WHERE usesysid = datdba) as dba, pg_encoding_to_char(encoding) as encoding, datpath FROM pg_database WHERE datname = 'alibi'
pg_dumpall: pg_dump failed on database "alibi", exiting

pg_dumpall -i -U postgres > test.sql
pg_dumpall: could not connect to database "template1": FATAL: user "postgres" does not exist

psql -U postgres
psql: FATAL:  user "postgres" does not exist

And i cannot modify row of 'first' postgres user (without passwd set) with or without 'second' present:

mw=> delete from pg_shadow where ctid = '(0,1)' ;
DELETE 0

mw=> update pg_catalog.pg_shadow set passwd='test' where usename='postgres' and ctid = '(0,1)';
UPDATE 0

So further help will be welcomed :) And thank U for trying to help me.

Greetings,
Bartek


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux