Re: could not access status of transaction pg_multixact issue
От | Alvaro Herrera |
---|---|
Тема | Re: could not access status of transaction pg_multixact issue |
Дата | |
Msg-id | 20141009151229.GD7043@eldon.alvh.no-ip.org обсуждение исходный текст |
Ответ на | Re: could not access status of transaction pg_multixact issue (Adrian Klaver <adrian.klaver@aklaver.com>) |
Ответы |
Re: could not access status of transaction pg_multixact issue
|
Список | pgsql-sql |
Adrian Klaver wrote: > On 10/09/2014 07:07 AM, jim_yates wrote: > >Alvaro Herrera-9 wrote > >>jim_yates wrote: > >> > >>>>A better way not involving mxid_age() would be to use pg_controldata to > >>>>extract the current value of the mxid counter, then subtract the > >>>current > >>>>relminmxid from that value. > >>> > >>> > >>>It's not clear which lines from pg_controldata to use for updating > >>>pg_database.datminmxid. > >> > >>The one labelled NextMultiXactId. > >> > >>>I also assume I would do the pg_database update on a idle database. > >> > >>It doesn't matter, actually. pg_database is a shared catalog, so an > >>update would affect all the databases. > >> > >>-- > >>Álvaro Herrera http://www.2ndQuadrant.com/ > >>PostgreSQL Development, 24x7 Support, Training & Services > > > >I tried doing the update to pg_database on my Dev server and I can't get it > >to work. How do I calculate the new datminmxid value? > > > >NextMultiXactId: 30349 relminmxid from pg_class for the table: 8376 > > > >If I subtract the relminmxid from the nextmulixact I get 21793 which won't > >work. > > > >production-copy=# update pg_database set datminmxid=21973 where > >datname='production-copy'; > >ERROR: column "datminmxid" is of type xid but expression is of type integer > > Casting issue, try: > > update pg_database set datminmxid='21973' where > datname='production-copy'; There must have been some confusion somewhere; certainly you shouldn't be subtracting anything. The subtraction was just suggested as a way to determine the age. The value to update pg_database.datminmxid to is the oldest one of all the relminmxid in pg_class; so if you have 8376 as the minimum value there, that's what you set pg_database.datminmxid to. Not the 21973 value. update pg_database set datminmxid='8376' where datname='production-copy'; -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
В списке pgsql-sql по дате отправления: