我正在运行一个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
更新软件包并安装 postgres
sudo yum update sudo yum install postgresql12
停止 postgresql 服务
sudo systemctl stop postgresql-11.service sudo systemctl stop postgresql-12.service
postgres
再次以用户身份登录sudo su postgres
切换到主目录
cd ~
迁移数据
/usr/pgsql-12/bin/pg_upgrade --old-datadir=/var/lib/pgsql/11/data --new-datadir=/var/lib/pgsql/12/data --old-bindir=/usr/pgsql-11/bin --new-bindir=/usr/pgsql-12/bin --old-options '-c config_file=/var/lib/pgsql/11/data/postgresql.conf' --new-options '-c config_file=/var/lib/pgsql/12/data/postgresql.conf'
切换到普通用户
exit
交换新旧 postgres 版本的端口。
sudo nano /var/lib/pgsql/12/data/postgresql.conf _change port to 5432_ sudo nano /var/lib/pgsql/11/data/postgresql.conf _change port to 5433_
启动postgresql服务
sudo systemctl start postgresql-12.service
以 postgres 用户身份登录
sudo su postgres cd ~
检查你的新 postgres 版本
psql -c "SELECT version();"
运行生成的新集群脚本
./analyze_new_cluster.sh
以普通(默认用户)用户身份返回并清理旧版本的烂摊子
exit sudo yum remove postgresql11 sudo rm -rf /etc/postgresql/11/ sudo su postgres cd ~ ./delete_old_cluster.sh
我确定该abstime
数据类型已在postgresql
12 中删除。这里有人知道如何解决此问题,以便我可以继续升级吗?请让我知道,谢谢!另外,如果您有任何问题,我会全力以赴。