您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
問題
更新 PostgreSQL 資料庫時發生錯誤。
錯誤訊息
ERROR: PostgreSQL Upgrade FAILED
可能原因
原因 | 說明 | 疑難排解指示適用於 |
---|---|---|
PostgreSQL 設定檔的複製設定不正確 | 升級期間複製設定有誤,因此 PostgreSQL 升級失敗。 | Edge Private Cloud 使用者 |
由 Apigee 使用者以外的其他安裝使用者執行的 PostgreSQL 安裝作業 | PostgreSQL 最初是以安裝使用者身分安裝,導致升級失敗。 | Edge Private Cloud 使用者 |
常見診斷步驟
如果在升級 PostgreSQL 資料庫時發生錯誤,請先執行下列診斷步驟:
重新命名 PostgreSQL 資料夾:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
確認原始備份資料位於名為「
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
」的資料夾例如:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
使用下列指令將
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
中的備份資料還原至/opt/apigee/data/apigee-postgresql/pgdata
:mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata
例如:
mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
重新執行
db_upgrade
指令:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
如果收到追蹤錯誤訊息...
pg_resetxlog: could not open file "global/pg_control" for reading: No such file or directory
...接著使用下列指令,將
pg_control.old
檔案重新命名為pg_control
:mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control
重新執行
db_upgrade
指令:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
如果問題仍未解決,請參閱原因:PostgreSQL 設定檔中複製的設定不正確。
原因:PostgreSQL 設定檔中複製設定不正確
診斷方式
- 請檢查 PostgreSQL 設定檔
/opt/apigee/apigee-postgresql/conf/pg_hba.conf
是否有所需的複製設定。 - 如果這個檔案有預期的複製設定,請參閱「apigee」使用者以外的其他安裝使用者執行的 PostgreSQL 安裝作業相關說明。
- 如果並非如此,請前往「解決」。
解析度
使用下列指令重新命名 PostgreSQL 資料資料夾:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
確認原始備份資料位於名為
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
的資料夾中例如:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
使用下列指令,將備份資料從
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
還原至/opt/apigee/data/apigee-postgresql/pgdata
:mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata
例如:
mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
如果您曾變更從屬主機,則必須更新
/opt/apigee/customer/application/postgresql.properties
中的下列屬性,才能更新設定檔pg_hba.conf
:conf_pg_hba_replication.connection=host replication apigee existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust
重新啟動
apigee-postgresql
服務,確保在上述步驟 4 中設定的屬性更新為pg_hba.conf
設定檔:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
使用下列指令讓設定檔
pg_hba.conf
不可變更,以確保在 PostgreSQL 升級期間不會以不正確的設定更新設定檔:chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
重新執行
db_upgrade
指令:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
移除設定檔
pg_hba.conf
的不可變動設定:chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
原因:apigee
以外的其他安裝使用者執行了 PostgreSQL 安裝作業
診斷方式
請按照下列步驟,查看是否有其他使用者將 rolesuper 設為 true:
在 PostgreSQL 節點中,使用以下指令登入 PostgreSQL:
psql -h $(hostname -i) -U apigee
執行下列 SQL 查詢:
select * from pg_authid;
查看是否有多位使用者將 rolesuper 設為 true。如果有,代表 PostgreSQL 升級失敗,因為其他使用者將其他使用者設為「安裝使用者」,而非「apigee」。系統會將任何具備「rolesuper」角色和較低 OID 的使用者視為安裝使用者。
如要檢查這類角色問題,請執行下列 SQL 查詢:
select oid,rolname,rolsuper from pg_roles; select * from pg_user;
解析度
使用下列指令登入 PostgreSQL:
psql -h $(hostname -i) -U apigee
將舊資料庫中現有的「
apigee
」角色重新命名為臨時使用者 (例如:apigee2
):update pg_authid set rolname ='apigee2' where rolname = 'apigee';
假設有另一位安裝使用者
srcapige
,將srcapige
角色重新命名為apigee
:update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
將
apigee2
重新命名為srcapige
使用者:update pg_authid set rolname ='secapigee' where rolname = 'apigee2';
更新所有重新命名使用者的密碼:
ALTER ROLE apigee WITH PASSWORD '<secret>'; ALTER ROLE srcapige WITH PASSWORD '<secret>';
使用下列指令重新命名 PostgreSQL 資料資料夾:
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
確認名為
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
的資料夾內有原始備份資料例如:
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
使用下列指令將
/opt/apigee/data/apigee-postgresql/pgdata-version.old/
資料夾中的資料還原至/opt/apigee/data/apigee-postgresql/pgdata
:mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata
例如:
mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
重新執行
db_upgrade
指令:/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
重新啟動所有
apigee-qpidd
和edge-qpid-server
服務:/opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
如果問題仍未解決,請參閱「必須收集診斷資訊」。
必須收集診斷資訊
如果按照上述疑難排解步驟操作後問題仍未解決,請收集下列診斷資訊。請與 Apigee 支援團隊聯絡,並將這項資訊提供給支援團隊:
- 在
/opt/apigee/apigee-postgresql/lib/actions/db_upgrade
檔案的第二行中加入set -x
。 按照常見診斷步驟操作,並將
db_upgrade
指令的主控台輸出內容提供給支援團隊:opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
請將下列記錄檔提供給支援團隊:
/opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log /opt/apigee/var/log/apigee-postgresql/update.log
提供下列作業系統指令的輸出內容,檢查替代設定是否設為
auto
。update-alternatives --display psql
或
update-alternatives --display pgsql
update-alternatives --list psql
或
update-alternatives --list pgsql
如果替代方案設為
manual
,您可以使用下列指令將替代選項設為auto
:update-alternatives --auto psql
設定
auto
的替代方案會將psql
和postgres
二進位檔指向已升級的版本。否則,二進位檔會指向舊版,這可能會造成問題。