prosource

Postgres에서 "ERROR: column c.relhasoids is not exist"를 수정하는 방법은 무엇입니까?

probook 2023. 5. 18. 21:07
반응형

Postgres에서 "ERROR: column c.relhasoids is not exist"를 수정하는 방법은 무엇입니까?

Postgresql에서 CREATE TABLE 명령을 사용하려고 합니다.테이블을 만든 후 테이블 이름을 입력하면 작동합니다.

하지만 \d 테이블 이름을 입력하면 아래 오류가 계속 발생합니다.

ERROR: column c.relhasoids does not exist LINE 1: ...riggers, c.relrowsecurity, c.relforcerowsecurity, c.relhasoi...

DROP DATABASE 테이블 이름을 사용하여 데이터베이스를 다시 만들고 테이블을 여러 번 다시 만들었습니다.하지만 그것은 작동하지 않았다.

어떤 제안이든 감사하겠습니다!감사해요.

Postgres v.12 및 이전 클라이언트(v.11 또는 이전 버전)를 사용하는 경우 다음 오류를 재현할 수 있습니다.

[root@def /]# psql -h 172.17.0.3
psql (11.5, server 12.0)
WARNING: psql major version 11, server major version 12.
         Some psql features might not work.
Type "help" for help.

postgres=# create table mytable (id int, name text);
CREATE TABLE
postgres=# table mytable;
 id | name 
----+------
(0 rows)

postgres=# \d mytable;
ERROR:  column c.relhasoids does not exist
LINE 1: ...riggers, c.relrowsecurity, c.relforcerowsecurity, c.relhasoi...
                                                             ^
postgres=# 

이는 v.12에서 테이블 OID가 더 이상 특수 열로 취급되지 않기 때문입니다.relhasoids열은 더 이상 필요하지 않습니다. V.12 사용하고 하십시오.psql이 오류가 발생하지 않도록 이진법을 사용합니다.

꼭 반시다사않수있다습니을지용하드를 수도 .psql따라서 여기서 더 일반적인 대답은 호환 가능한 클라이언트를 사용하고 있는지 확인하는 것입니다.

Postgres도커 컨테이너로 실행하는 사용자:

호스트에서 psql을 실행하는 대신 컨테이너 내부에서 psql을 실행합니다.

docker exec -it postgres_container_name psql your_connection_string

Postgres 이미지는 항상 해당(따라서 항상 업데이트됨) 버전의 psql과 함께 제공되므로 호스트 시스템에 올바른 버전이 설치되는 것에 대해 걱정할 필요가 없습니다.

DataGrip을 사용하는 경우 다음과 같은 간단한 해결 방법이 있습니다.

"JDBC 메타데이터를 사용한 Introspect"를 사용해 보십시오.이를 통해 postgresql 서버와 DataGrip 클라이언트 간에 버전 불일치가 발생했을 때 문제가 해결되었습니다.

연결 설정에서 -> 옵션 탭 -> JDBC 메타데이터를 사용한 Introspect를 선택합니다.

https://www.jetbrains.com/help/datagrip/data-sources-and-drivers-dialog.html#optionsTab 에 따르면:

JDBC 기반 내부 검사기로 전환합니다.

데이터베이스 개체(DB 메타데이터)에 대한 정보를 검색하기 위해 DataGrip은 다음과 같은 내부 검사기를 사용합니다.

  1. 기본 내부 검사기(특정 DBMS에서는 사용할 수 없을 수 있음).기본 내부 검사기는 DBMS 관련 테이블 및 보기를 메타데이터 소스로 사용합니다.DBMS 관련 세부 정보를 검색하고 데이터베이스 개체의 더 정확한 그림을 생성할 수 있습니다.

  2. JDBC 기반 내부 검사기(모든 DBMS에 사용 가능).JDBC 기반 내부 검사기는 JDBC 드라이버에서 제공하는 메타데이터를 사용합니다.데이터베이스 개체 및 해당 속성에 대한 표준 정보만 검색할 수 있습니다.

기본 내부 검사기가 실패하거나 사용할 수 없는 경우 JDBC 기반 검사기를 사용하는 것이 좋습니다.

데이터베이스 서버 버전이 DataGrip에서 지원하는 최소 버전보다 오래된 경우 기본 내부 검사기가 실패할 수 있습니다.

JDBC 기반 내부 검사기로 전환하여 데이터베이스 구조 정보 검색과 관련된 문제를 해결할 수 있습니다.예를 들어, 데이터베이스 또는 스키마 수준 아래의 데이터베이스 개체에 존재하는 스키마가 데이터베이스 도구 창에 표시되지 않는 경우.

입니다.psql 서버와 의 postgres 파일을 참조하십시오.psql 버전 11에서 postgres 버전 12와 대화할 때 이 문제를 본 적이 있습니다.이 문제를 해결하려면 psql 버전을 12로 업그레이드합니다.

도커 postgres를 실행하는 경우 컨테이너로 실행한 다음 거기에 설치된 psql 클라이언트를 사용할 수 있습니다.

# get the container id with this
docker ps
# Then exec into the container, please note the host will now be 120.0.0.1
docker exec -it c12e8c6b8eb5 /bin/bash

psql이 9.2이고 서버 버전이 12.7이기 때문에 이 문제가 발생했습니다. 따라서... psql 클라이언트를 업데이트해야 합니다.하지만 어떻게요?

다운로드/설치하기 전에 올바른 버전을 이미 가지고 있을 수도 있습니다.저 같은 경우에는 그랬어요.

는 실했습다를 실행했습니다.which psql내 버전이 나온다는 것을 보여준 것은/usr/bin/psql그리고 나서 확인했습니다./usr/pgsql-12/bin그 안에 psql이 있는 걸 발견했습니다.그래서 제가 해야 할 일은 psql이 거기서 픽업되었는지 확인하는 것이었습니다.할 수 있습니다. 에는 이 제 이를제어수여곳있다습니이에 했습니다. 저의 경우에는 이 행을 추가했습니다..pgsql_profile의 홈 있음):(postgres 디리에서토렉홈사의용자):

export PATH="/usr/pgsql-12/bin:$PATH"

하여 postgres which psql변경이 성공했음을 보여줍니다.

 which psql
/usr/pgsql-12/bin/psql

이 답변은 다음과 같습니다.pgcli

사중인경우를 .pgcli 문제가 발생할 수 있습니다.파이썬 패키지를 업데이트하면 해결됩니다.pgspecial.

pgcli용사를 pip파이썬 버전에 따라 간단하게 할 수 있습니다.

pip install -U pgspecial

또는

pip3 install -U pgspecial

하고 Ubuntu를 pgcli과 같이할 수 . apt 사 를 사 있 수 니 습 다 할 전 환

sudo apt remove --purge pgcli
pip3 install pgcli

배포 패키지 python-pgspecial또는python3-pgspecialUbuntu 패키지사이트에서.이 경우 종속성도 업데이트해야 할 수 있습니다.

저는 오늘 이 문제를 겪었고, 이로 인해 작업을 계속할 수 없었습니다. 이상하게도 애플리케이션 코드가 정상적으로 작동하고 있습니다.

나중에 이 문제는 DB에 연결하는 데 사용하는 OmniDb 클라이언트를 사용하는 경우에만 발생한다는 것을 발견했습니다.

나는 클라이언트를 postgres 설치와 함께 제공되는 기본 pgAdmin 4로 전환했고 더 이상 pgAdmin 4에서 문제가 발생하지 않습니다.링크: https://www.pgadmin.org/download/pgadmin-4-windows/

OmniDb 클라이언트가 이전 버전일 수 있지만 현재 pgAdmin 4를 사용하여 문제를 해결할 시간이 없습니다.

도움이 되길 바랍니다.

방금 업데이트된 DataGrip은 이 문제를 해결했습니다. DataGrip은 2020년 2월 12일에 구축된 버전 DataGrip 2019.3.3, Build #DB-193.6494.42로 업데이트되었으며 현재 작동 중입니다 :)

DataGrip 사용자 전용!

저는 오늘도 같은 문제가 있었습니다.저의 경우 버전 12를 삭제하고 버전 11을 설치했을 때 문제가 해결되었습니다.v12에는 다른 열을 따라 생성해야 하는 일부 기능이 있는 것 같습니다.

저도 같은 문제가 있었습니다.하지만 저는 2019년 10월 14일에 최신 빌드를 다운로드하여 해결책을 찾았습니다: https://postbird.paxa.kuber.host/2019_10_14.06_42-master-7a9e949

도움이 되길 바랍니다.

이 문제를 해결하려면 편집Postgres.php줄을 철하여 주석을 달다hasObjectID아래와 같이 기능합니다.

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'];
    }
    */
}

PgAdmin을 사용하여 데이터베이스를 조회할 때도 동일한 문제가 있었습니다.

PgAdmin의 최신 버전을 설치하자 오류가 사라졌습니다!

pgadmin을 다시 시작해 볼 수도 있습니다.

postgres96에서 postgres12로 업그레이드한 후에도 같은 문제가 발생했습니다.내 pgadmin은 psql v12.0을 실행했기 때문에 문제가 되지 않았습니다.저는 다른 문제로 pgadmin을 다시 시작했고 재발방지 이슈는 사라졌습니다.

만약 누가 나에게 이것이 왜 효과가 있었는지 설명해 준다면 감사하겠습니다.

버전 11을 사용하십시오.

버전 11 https://websiteforstudents.com/how-to-install-postgresql-11-on-ubuntu-16-04-18-04-servers/ 을 설치하는 방법

저는 또한 제 postgresql 테이블에서도 같은 문제가 발생했습니다.저는 아래 질문으로 이 문제를 해결했습니다.

ALTER Table MyDataBase.table_name add column column_name data_type default 0 not null;
commit;

언급URL : https://stackoverflow.com/questions/58461178/how-to-fix-error-column-c-relhasoids-does-not-exist-in-postgres

반응형