Postgresql

如何解決由於使用者表中使用了“reg*”數據類型而無法升級實例?

  • February 25, 2022

我嘗試通過瀏覽器中的管理控制台將 AWS 上的 Postgres DB 引擎從 11.12 升級到 13.3。但無法執行升級,error/pg_upgrade_precheck.log 顯示此消息。

由於以下原因,無法將實例從 11.12.R1 升級到 13.3.R1。請對使用與請求的主要引擎版本升級不兼容的數據庫採取適當的措施,然後重試。

  • 數據庫中的以下用法'

$$ mydbname $$’ 升級前需要更正: – 無法升級實例,因為使用者表中使用了“reg*”數據類型。請刪除“reg*”數據類型的所有用法,然後重試。

我檢查了 AWS RDS 升級指南,它特別提到了這個檢查。它描述了執行此查詢以檢查是否沒有使用不受支持的 reg* 數據類型。問題是,當我執行它時它返回 0,這意味著不會使用不受支持的 reg* 數據類型。

SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a 
 WHERE c.oid = a.attrelid 
     AND NOT a.attisdropped 
     AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 
                        'pg_catalog.regprocedure'::pg_catalog.regtype, 
                        'pg_catalog.regoper'::pg_catalog.regtype, 
                        'pg_catalog.regoperator'::pg_catalog.regtype, 
                        'pg_catalog.regconfig'::pg_catalog.regtype, 
                        'pg_catalog.regdictionary'::pg_catalog.regtype) 
     AND c.relnamespace = n.oid 
     AND n.nspname NOT IN ('pg_catalog', 'information_schema');
                                   

我還發現了這個問答。這給了我 1 個包含 2 列的使用者表。我刪除了該表,但升級過程仍然無法正常工作,並給出與以前相同的錯誤消息。

我如何才能找到不受支持的 reg* 數據類型的用途?

您的查詢似乎來自 v10,因此缺少兩種 reg 類型。

'pg_catalog.regcollation'
'pg_catalog.regnamespace'

reg*該查詢中缺少幾種類型。這是 v14 的完整列表:

\dT pg_catalog.reg*
                       List of data types
  Schema   │     Name      │             Description              
════════════╪═══════════════╪══════════════════════════════════════
pg_catalog │ regclass      │ registered class
pg_catalog │ regcollation  │ registered collation
pg_catalog │ regconfig     │ registered text search configuration
pg_catalog │ regdictionary │ registered text search dictionary
pg_catalog │ regnamespace  │ registered namespace
pg_catalog │ regoper       │ registered operator
pg_catalog │ regoperator   │ registered operator (with args)
pg_catalog │ regproc       │ registered procedure
pg_catalog │ regprocedure  │ registered procedure (with args)
pg_catalog │ regrole       │ registered role
pg_catalog │ regtype       │ registered type
(11 rows)

引用自:https://dba.stackexchange.com/questions/307941