Как исправить «ОШИБКА: столбец relhasoids не существует» в phpPgAdmin? - PullRequest
0 голосов
/ 08 ноября 2019

Я обновляю сервер Linux новой версией PostgreSql , и у меня появляется сообщение об ошибке в phpPgAdmin , когда япросмотрите таблицу.

Сервер Ubuntu 18.04.3 LTS под управлением Apache 2.4.41, PHP 7.3.11 и при обновлении до PostgreSQL 12.0 и phpPgAdmin 7.12.0 ошибка возникает. С PostgreSQL 11.5 и phpPgAdmin 5.6 у меня не было этой проблемы.

Я ожидаю визуализировать данные, хранящиеся в таблице, с помощью phpPgAdmin, но фактический вывод:

    SQL error:
ERROR:  column «relhasoids» does not exist
LINE 1: SELECT relhasoids FROM pg_catalog.pg_class WHERE relname='pr...

    In statement:
SELECT relhasoids FROM pg_catalog.pg_class WHERE relname='product'
            AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='public')

Ответы [ 3 ]

2 голосов
/ 08 ноября 2019

Редактирование файла / usr / share / phppgadmin / classes / database / Postgres.php и комментарий line 1045 to line 1054 ошибка исчезает:

function hasObjectID($table) {
    $c_schema = $this->_schema;
    $this->clean($c_schema);
    $this->clean($table);
/*
    $sql = "SELECT relhasoids FROM pg_catalog.pg_class WHERE relname='{$table}'
        AND relnamespace = (SELECT oid FROM pg_catalog.pg_namespace WHERE nspname='{$c_schema}')";

    $rs = $this->selectSet($sql);
    if ($rs->recordCount() != 1) return null;
    else {
        $rs->fields['relhasoids'] = $this->phpBool($rs->fields['relhasoids']);
        return $rs->fields['relhasoids'];
    } */
}
1 голос
/ 08 ноября 2019

Этот столбец больше не существует, поскольку вы больше не можете создавать таблицы с OID.

Из документации :

WITH (storage_parameter [=значение] [, ...])

В этом разделе указываются необязательные параметры хранения для таблицы или индекса;см. Параметры хранения для получения дополнительной информации. Для обратной совместимости предложение WITH для таблицы может также включать OIDS = FALSE, чтобы указать, что строки новой таблицы не должны содержать OID (идентификаторы объекта), OIDS = TRUE больше не поддерживается.

БЕЗ OIDS

Это обратно совместимый синтаксис для объявления таблицы БЕЗ OIDS, создание таблицы WITH OIDS больше не поддерживается.

1 голос
/ 08 ноября 2019

Это потому, что phpPgAdmin несовместим с PostgreSQL v. 12. PostgreSQL v. 12 удалил столбец relhasoids из-за нового способа обработки OID. На момент написания этой статьи pgPgAdmin не поддерживает PostgreSQL v. 12 ( не указан на веб-сайте ). Возможно, вам придется поискать альтернативных клиентов.

См. Также Как исправить ошибку «ОШИБКА: столбец c.relhasoids не существует» в Postgres?

...