我正在运行一个旧的postgresql
数据库,该数据库最初安装为v9.6,我正在逐步地将它从一个版本升级到下一个版本,直到我能够将其更新到版本13.3。从9.6升级到10,从10升级到11成功。但是,当我试图升级到版本12时,会出现以下错误:
bash-4.4$ tail pg_upgrade_dump_16421.log
pg_restore: creating TYPE "public.gtrgm"
pg_restore: creating FUNCTION "public.Seqnextval("abstime")"
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 662; 1255 16425 FUNCTION Seqnextval("abstime") effective
pg_restore: error: could not execute query: ERROR: type abstime does not exist
Command was: CREATE FUNCTION "public"."Seqnextval"("abstime") RETURNS bigint
LANGUAGE "sql"
AS $$select setval('units_id_seq', (select max(id) from units)+1) from units limit 1;$$;
以下是我从11点到12点为达到现在的目标所采取的步骤:
B)升级到PostgreSQL 12
sudo yum更新sudo yum安装postgresql12
systemctl停止PostgreSQL11服务sudo systemctl停止postgresql-12.service
postgres
用户身份登录sudo su postgres
cd ~
/usr/pgsql/12/bin/pgsql-11/data-data-datadir=/var/lib/pgsql/11/data-新-datadir=/var/lib/pgsql/12/data-old-bindir=/usr/pgsql-11/bin-bindir=/usr/pgsql-12/bin-旧选项'-c config_file=/var/lib/pgsql/11/data/postgresql.conf‘-新选项'-c config_file=/var/lib/pgsql/12/data/postgresql.conf'
出口
sudo nano /var/lib/pgsql/12/data/postgresql.conf _change端口到5432_ sudo nano /var/lib/pgsql/11/data/postgresql.conf _change端口到5433_
sudo系统启动postgresql-12.service
sudo cd ~
psql -c "SELECT version();"
./analyze_new_cluster.sh
出口sudo yum移除postgresql11 sudo rm -rf /etc/postgresql/11/ sudo postgres cd ~postgresql11
我知道abstime
数据类型已经在postgresql
12中删除了。这里有人知道如何解决这个问题,这样我就可以继续升级了吗?请告诉我,谢谢!如果你有什么问题,我会全神贯注的。
发布于 2021-07-31 06:32:08
功能"Seqnextval“可以做什么?
CREATE FUNCTION "public"."Seqnextval"("abstime")
RETURNS bigint
LANGUAGE "sql"
AS $$
select setval('units_id_seq', (select max(id) from units)+1) from units limit 1;
$$;
注意,函数中从未使用abstime
类型的参数。
我想把它改为:
CREATE FUNCTION "public"."Seqnextval"(anyelement)
然后重新运行升级过程。
在一般情况下,必须对abstime
做什么?
可能还有其他使用abstime
的函数。
寻找其他功能:
WITH funcs AS (
SELECT
P.proname,
p.pronamespace::regnamespace::text AS func_schema,
obj_description(p.oid),
pg_catalog.pg_get_function_arguments(p.oid) AS args,
pg_get_function_result(p.oid) AS rettype
FROM
pg_proc P
)
SELECT
*
FROM
funcs
WHERE
(args ~~ '%abstime%'
OR rettype = 'abstime'
)
AND func_schema <> 'pg_catalog'
其他表格/意见:
SELECT * FROM information_schema."columns"
WHERE
data_type = 'abstime'
AND table_schema <> 'pg_catalog'
如果没有其他的功能和关系-你是幸运的。
否则:
检查每个function/relation
https://stackoverflow.com/questions/68596185
复制相似问题