Bagaimana cara memperbaiki "ERROR: kolom c.relhasoids tidak ada" di Postgres?

33

Saya mencoba membuat perintah TABEL di Postgresql. Setelah membuat tabel, jika saya memencet nama tabel TABEL , itu berfungsi.

Tapi aku memencet \ d nama tabel , saya terus mendapatkan kesalahan di bawah ini.

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

Saya mencoba DROP DATABASE nama tabel membuat ulang database dan membuat ulang tabel lagi beberapa kali. Tapi itu tidak berhasil.

Setiap saran akan sangat dihargai! Terima kasih.

Nao
sumber
Versi apa yang Anda gunakan?
richyen
Itu dipecahkan! Terima kasih banyak semuanya! cari pg_hba.conf dibuatb Nao Kemudian berhasil.
Nao
Solusi sederhana yang berhasil ada di sini - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy
Apa yang Anda maksud dengan "jika saya memasukkan nama tabel TABEL, itu berfungsi."
Adelin

Jawaban:

30

Saya dapat mereproduksi kesalahan Anda jika saya menggunakan Postgres v.12 dan klien yang lebih lama (v.11 atau sebelumnya):

[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=# 

Ini karena dalam ay. 12, tabel OID tidak lagi diperlakukan sebagai kolom khusus , dan karenanya relhasoidskolom tidak lagi diperlukan. Pastikan Anda menggunakan psqlbiner v. 12 sehingga Anda tidak menemukan kesalahan ini.

Anda mungkin tidak perlu menggunakan psql, jadi jawaban yang lebih umum di sini adalah untuk memastikan Anda menggunakan klien yang kompatibel.

orang kaya
sumber
Terima kasih banyak! Saya menggunakan v11.5 ... Saya akan mencoba mencopot dan menginstal ulang postgress lagi.
Nao
Jawaban ini membawa saya ke pelakunya dalam kasus saya: Saya memiliki beberapa instalasi PgAdmin, dan pencarian Windows hanya memberi saya yang lama untuk digunakan. Karena itu saya menggunakan PgAdmin lama dengan Postgres v12.
funforums
17

Bagi siapa pun yang menjalankan Postgres sebagai wadah Docker :

Alih-alih menjalankan psql dari host, jalankan dari dalam wadah misalnya

docker exec -it postgres_container_name psql your_connection_string

Gambar Postgres selalu dikirimkan dengan versi psql yang sesuai — dan dengan demikian selalu diperbarui sehingga Anda tidak perlu khawatir menginstal versi yang benar di mesin host.

joakim
sumber
Itu benar-benar merindukan intinya. Anda harus dapat mengakses wadah secara mandiri.
Jon M
Saya tidak yakin apa artinya "mengakses wadah secara mandiri" dalam konteks ini atau mengapa perintah dalam balasan saya entah bagaimana tidak mengizinkannya?
joakim
Karena harus langsung mengakses wadah mungkin tidak selalu memungkinkan. Masalahnya di sini tampaknya memerlukan layanan postgres yang terpisah. Menurunkan klien psql, atau memutakhirkan server adalah solusinya; tidak hanya melewati masalah dan menjalankannya bersama. Itu tidak selalu mungkin karena kendala arsitektur lainnya.
Jon M
Tentu saja; Saya tidak menyarankan menggunakan Docker sebagai solusi . Itu sebabnya saya memimpin dengan "Bagi siapa pun yang menjalankan Postgres sebagai wadah Docker".
joakim
Bisakah Anda memposting contoh "your_connection_string"?
Olle Härstedt
2

Saya memiliki masalah ini hari ini, tidak dapat melanjutkan pekerjaan karena ini, anehnya kode aplikasi berfungsi dengan baik.

Kemudian, ditemukan masalah ini hanya terjadi jika saya menggunakan klien OmniDb yang saya gunakan untuk terhubung ke DB.

Saya telah beralih klien ke pgAdmin 4 default yang datang dengan instalasi postgres & masalah tidak terjadi lagi pgAdmin 4. Tautan: https://www.pgadmin.org/download/pgadmin-4-windows/

Mungkin saja klien OmniDb mungkin lebih tua, tetapi tidak ada waktu untuk memecahkan masalah itu, menggunakan pgAdmin 4 untuk saat ini.

Semoga itu bisa membantu.

Manohar Reddy Poreddy
sumber
0

Saya memiliki masalah yang sama hari ini juga. Dalam kasus saya, masalah diselesaikan ketika saya menghapus versi 12 dan menginstal versi 11. Tampaknya v12 memiliki beberapa fitur yang harus dibuat di sepanjang kolom lainnya.

Danilo Silva
sumber
Anda mungkin menggunakan psqldari instalasi Postgres 11 Anda untuk terhubung ke Postgres 12 - Anda seharusnya menggunakan psqlPostgres 12
a_horse_with_no_name