web-dev-qa-db-fra.com

Comment réparer "Erreur: les relhasoïdes de la colonne n'existent pas" dans phppgadmin?

Je mettez à jour un serveur Linux avec une nouvelle version de PostgreSQL et j'ai un message d'erreur dans PHPPGADMIN quand je parcourt une table.

Le serveur Ubuntu 18.04.3 LTS exécutant Apache 2.4.41, PHP 7.3.11 et lorsque je me met à jour PostgreSQL 12. et PHPPGADMIN 7.12. L'erreur se produit. Avec PostgreSQL 11.5 et PHPPGADMIN 5.6, je n'ai pas eu ce problème.

Je m'attends à visualiser les données stockées dans la table à l'aide de phppgadmin, mais la sortie réelle est la suivante:

    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')
5
Luis Cedeño

Modification du fichier (/USR/Share/phppgadmin/Classes/Base de données/Postgres.php et commentaire line 1045 to line 1054 L'erreur disparaît:

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'];
    } */
}
5
Luis Cedeño

Cette colonne n'existe plus, car vous ne pouvez pas créer de tables avec OID plus longtemps.

Du Documentation :

Avec (rangement_paramètre [= valeur] [ ...])

Cette clause spécifie les paramètres de stockage facultatifs d'une table ou d'un index; Voir Paramètres de stockage pour plus d'informations. Pour la compatibilité ascendante, la clause avec une table peut également inclure des OIDS = FALSE pour spécifier que les lignes de la nouvelle table ne doivent pas contenir d'OID (identificateurs d'objet), OIDS = TRUE n'est plus supporté.

Sans Oids

Il s'agit de syntaxe compatible vers l'arrière pour déclarer une table sans OID, créer une table avec OID n'est plus supporté.

2
Islingre

En effet, PHPPGADMIN n'est pas compatible avec PostgreSQL v. 12. PostgreSQL v. 12 a supprimé la colonne relhasoids en raison de la manière dont les OID sont manipulés. À compter de l'heure de ce message, PGPGADMIN ne prend pas en charge PostgreSQL v. 12 (c'est non répertorié sur le site Web ). Vous devrez peut-être rechercher des clients alternatifs.

Voir aussi Comment réparer "Erreur: la colonne C.Relhasoids n'existe pas" à Postgres?

1
richyen