วิธีการแก้ไข“ ข้อผิดพลาด: คอลัมน์ c.relhasoids ไม่มีอยู่” ใน Postgres?


33

ฉันพยายามสร้างคำสั่งTABLEใน Postgresql หลังจากสร้างตารางแล้วถ้าฉันชกในชื่อตารางTABLE ก็ใช้งานได้

แต่ผมเจาะใน\ d ชื่อตารางผมให้ได้รับข้อผิดพลาดด้านล่าง

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

ฉันพยายามDROP DATABASE ชื่อตารางสร้างฐานข้อมูลขึ้นใหม่และสร้างตารางอีกครั้งหลายครั้ง แต่มันไม่ทำงาน

ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชม! ขอบคุณ.


คุณใช้เวอร์ชั่นอะไร
richyen

มันถูกแก้ไขแล้ว! ขอบคุณทุกคนมาก! ค้นหา pg_hba.conf สร้างแล้ว Nao จากนั้นทำงาน
หนาว

วิธีแก้ปัญหาง่ายๆที่ใช้งานได้ที่นี่ - stackoverflow.com/a/58462270/984471
Manohar Reddy Poreddy

คุณหมายถึงอะไรโดย "ถ้าฉันชกในชื่อตาราง TABLE มันใช้งานได้"
Adelin

คำตอบ:


30

ฉันสามารถทำซ้ำข้อผิดพลาดของคุณหากฉันใช้ 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คอลัมน์จึงไม่จำเป็นอีกต่อไป โปรดตรวจสอบให้แน่ใจว่าคุณใช้psqlไบนารี่v. 12 ดังนั้นคุณจะไม่พบข้อผิดพลาดนี้

คุณอาจไม่จำเป็นต้องใช้psqlดังนั้นคำตอบทั่วไปเพิ่มเติมที่นี่คือเพื่อให้แน่ใจว่าคุณใช้ไคลเอ็นต์ที่เข้ากันได้


ขอบคุณมาก! ฉันใช้ v11.5 ... ฉันจะลองถอนการติดตั้งและติดตั้ง postgress อีกครั้ง
หนาว

คำตอบนี้นำฉันไปสู่ผู้ร้ายในกรณีของฉัน: ฉันมีการติดตั้ง PgAdmin หลายรายการและการค้นหาของ Windows เป็นเพียงการมอบรุ่นเก่าให้ฉันใช้ ดังนั้นฉันจึงใช้ PgAdmin เก่ากับ Postgres v12
funforums

17

สำหรับทุกคนที่ใช้Postgresเป็นคอนเทนเนอร์Docker :

แทนที่จะเรียกใช้psqlจากโฮสต์ให้เรียกใช้จากภายในคอนเทนเนอร์เช่น

docker exec -it postgres_container_name psql your_connection_string

Postgresภาพมักจะมาพร้อมกับที่สอดคล้องกันและจึงมักจะมีการปรับปรุงรุ่นของpsqlดังนั้นคุณจึงไม่ต้องกังวลเกี่ยวกับการมีรุ่นที่ถูกต้องติดตั้งบนเครื่องโฮสต์


นั่นพลาดจุดจริงๆ คุณต้องสามารถเข้าถึงคอนเทนเนอร์ได้อย่างอิสระ
Jon M

ฉันไม่แน่ใจว่า "การเข้าถึงคอนเทนเนอร์อย่างอิสระ" หมายถึงอะไรในบริบทนี้หรือทำไมคำสั่งในการตอบกลับของฉันจึงไม่อนุญาต
Joakim

เพราะการเข้าถึงภาชนะโดยตรงอาจไม่สามารถทำได้เสมอไป ดูเหมือนว่าปัญหานี้ต้องใช้บริการ postgres แยกต่างหาก การดาวน์เกรดไคลเอ็นต์ psql หรือการอัพเกรดเซิร์ฟเวอร์เป็นโซลูชัน ไม่เพียง แต่หลีกเลี่ยงปัญหาและทำงานร่วมกัน นั่นเป็นไปไม่ได้เสมอไปเนื่องจากข้อ จำกัด ทางสถาปัตยกรรมอื่น ๆ
Jon M

แน่นอน; ผมไม่แนะนำให้ใช้หางเป็นวิธีแก้ปัญหา นั่นเป็นเหตุผลที่ฉันนำด้วย“ สำหรับทุกคนที่ใช้ Postgres ในฐานะนักเทียบท่า”
Joakim

คุณช่วยกรุณาโพสต์ตัวอย่างของ "your_connection_string" ได้ไหม?
Olle Härstedt

2

ฉันมีปัญหานี้ในวันนี้ไม่สามารถทำงานต่อไปได้เนื่องจากสิ่งนี้แปลกรหัสแอปพลิเคชันทำงานได้ดี

ในภายหลังพบปัญหานี้เกิดขึ้นเฉพาะเมื่อฉันใช้ไคลเอ็นต์ OmniDb ที่ฉันใช้เชื่อมต่อกับฐานข้อมูล

ฉันเปลี่ยนไคลเอนต์เป็นค่าเริ่มต้น pgAdmin 4 ที่มาพร้อมกับการติดตั้ง postgres & ปัญหาไม่ได้เกิดขึ้นอีกต่อไป pgAdmin 4 ลิงก์: https://www.pgadmin.org/download/pgadmin-4-windows/

เป็นไปได้ว่าไคลเอ็นต์ OmniDb อาจเก่ากว่า แต่ไม่มีเวลาที่จะแก้ไขปัญหาโดยใช้ pgAdmin 4 ในตอนนี้

หวังว่าจะช่วย


0

ฉันมีปัญหาเดียวกันวันนี้เช่นกัน ในกรณีของฉันปัญหาได้รับการแก้ไขเมื่อฉันลบเวอร์ชัน 12 และติดตั้งเวอร์ชัน 11 ดูเหมือนว่า v12 มีคุณสมบัติบางอย่างที่ต้องสร้างตามคอลัมน์อื่น ๆ


คุณอาจใช้psqlจากการติดตั้ง Postgres 11 เพื่อเชื่อมต่อกับ Postgres 12 - คุณควรใช้psqlกับ Postgres 12
a_horse_with_no_name

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.