Thread: pg_upgrade (Checking for reg* data types)

pg_upgrade (Checking for reg* data types)

From
Gerrit Fouche
Date:

Hi All,

I am trying to upgrade Postgresql 11.5 to 12 RC1, OS Centos 6. Running pg_upgrade with --check it fails with "Checking for reg* data types in user tables" The table listed are: pg_ts_dict,pg_ts_parser. Trying to drop the tables I get msg " permission denied: "pg_ts_dict" is a system catalog" I also for same reason can not remove the oids "ALTER TABLE pg_ts_parser set without oids;"

From pg_catalog.pg_extension the following are listed: plpgsql,pg_stat_statements,tablefunc. So the Text search extension is not in use.

This database was upgrade since Postgresql 8.3 by using "pg_dumpall -p 5432 | psql -d postgres -p 5433" and not pg_upgrade.

Regards
Gerrit Fouche

Re: pg_upgrade (Checking for reg* data types)

From
Bruce Momjian
Date:
On Mon, Sep 30, 2019 at 11:15:47AM +0200, Gerrit Fouche wrote:
> 
> Hi All,
> 
> I am trying to upgrade Postgresql 11.5 to 12 RC1, OS Centos 6. Running
> pg_upgrade with --check it fails with "Checking for reg* data types in user
> tables" The table listed are: pg_ts_dict,pg_ts_parser. Trying to drop the
> tables I get msg " permission denied: "pg_ts_dict" is a system catalog" I also
> for same reason can not remove the oids "ALTER TABLE pg_ts_parser set without
> oids;"
> 
> From pg_catalog.pg_extension the following are listed:
> plpgsql,pg_stat_statements,tablefunc. So the Text search extension is not in
> use.
> 
> This database was upgrade since Postgresql 8.3 by using "pg_dumpall -p 5432 |
> psql -d postgres -p 5433" and not pg_upgrade.

Wow, 8.3 --- that is old.  Please do psql \d on those two tables and
show us the output.  System tables are created by pg_upgrade as fresh,
not copied from the old cluster, so I am confused how you have reg*
entries in there.

Also, I wonder if there are pg_ts_dict and pg_ts_parser tables that are
not in pg_catalog, but in some other schema, and those are what is
complaining about.  (The pg_upgrade query specifically skips checking
pg_catalog tables.)

I think maybe pg_upgrade should always output the schema name for such
objects --- I think someone propsed a patch for that recently.

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +



Re: pg_upgrade (Checking for reg* data types)

From
Bruce Momjian
Date:
On Mon, Sep 30, 2019 at 11:15:47AM +0200, Gerrit Fouche wrote:
> 
> Hi All,
> 
> I am trying to upgrade Postgresql 11.5 to 12 RC1, OS Centos 6. Running
> pg_upgrade with --check it fails with "Checking for reg* data types in user
> tables" The table listed are: pg_ts_dict,pg_ts_parser. Trying to drop the
> tables I get msg " permission denied: "pg_ts_dict" is a system catalog" I also
> for same reason can not remove the oids "ALTER TABLE pg_ts_parser set without
> oids;"

PG 12 outputs the schema.table.column names, separated by dots.  I need
to see the exact error output.  This is the check query:

                                "SELECT n.nspname, c.relname, a.attname "
                                "FROM   pg_catalog.pg_class c, "
                                "       pg_catalog.pg_namespace n, "
                                "       pg_catalog.pg_attribute a, "
                                "       pg_catalog.pg_type t "
                                "WHERE  c.oid = a.attrelid AND "
                                "       NOT a.attisdropped AND "
                                "       a.atttypid = t.oid AND "
                                "       t.typnamespace = "
                                "           (SELECT oid FROM pg_namespace "
                                "            WHERE nspname = 'pg_catalog') AND"
                                "       t.typname IN ( "
        /* regclass.oid is preserved, so 'regclass' is OK */
                                "           'regconfig', "
                                "           'regdictionary', "
                                "           'regnamespace', "
                                "           'regoper', "
                                "           'regoperator', "
                                "           'regproc', "
                                "           'regprocedure' "
        /* regrole.oid is preserved, so 'regrole' is OK */
        /* regtype.oid is preserved, so 'regtype' is OK */
                                "           ) AND "
                                "       c.relnamespace = n.oid AND "
                                "       n.nspname NOT IN ('pg_catalog', 'information_schema')");


-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +



Re: pg_upgrade (Checking for reg* data types)

From
Gerrit Fouche
Date:
Thank you very much. 

On Mon, Sep 30, 2019 at 10:33 PM Bruce Momjian <bruce@momjian.us> wrote:
On Mon, Sep 30, 2019 at 11:15:47AM +0200, Gerrit Fouche wrote:
>
> Hi All,
>
> I am trying to upgrade Postgresql 11.5 to 12 RC1, OS Centos 6. Running
> pg_upgrade with --check it fails with "Checking for reg* data types in user
> tables" The table listed are: pg_ts_dict,pg_ts_parser. Trying to drop the
> tables I get msg " permission denied: "pg_ts_dict" is a system catalog" I also
> for same reason can not remove the oids "ALTER TABLE pg_ts_parser set without
> oids;"

PG 12 outputs the schema.table.column names, separated by dots.  I need
to see the exact error output.  This is the check query:

                                "SELECT n.nspname, c.relname, a.attname "
                                "FROM   pg_catalog.pg_class c, "
                                "       pg_catalog.pg_namespace n, "
                                "       pg_catalog.pg_attribute a, "
                                "       pg_catalog.pg_type t "
                                "WHERE  c.oid = a.attrelid AND "
                                "       NOT a.attisdropped AND "
                                "       a.atttypid = t.oid AND "
                                "       t.typnamespace = "
                                "           (SELECT oid FROM pg_namespace "
                                "            WHERE nspname = 'pg_catalog') AND"
                                "       t.typname IN ( "
        /* regclass.oid is preserved, so 'regclass' is OK */
                                "           'regconfig', "
                                "           'regdictionary', "
                                "           'regnamespace', "
                                "           'regoper', "
                                "           'regoperator', "
                                "           'regproc', "
                                "           'regprocedure' "
        /* regrole.oid is preserved, so 'regrole' is OK */
        /* regtype.oid is preserved, so 'regtype' is OK */
                                "           ) AND "
                                "       c.relnamespace = n.oid AND "
                                "       n.nspname NOT IN ('pg_catalog', 'information_schema')");


--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

+ As you are, so once was I.  As I am, so you will be. +
+                      Ancient Roman grave inscription +