ดูเหมือนว่า PostgreSQL ไม่อนุญาตให้สร้างตารางฐานข้อมูลชื่อ 'ผู้ใช้' แต่ MySQL จะอนุญาตให้สร้างตารางดังกล่าว
นั่นเป็นเพราะมันเป็นคำสำคัญ? แต่ Hibernate ไม่สามารถระบุปัญหาใด ๆ (แม้ว่าเราจะตั้งค่า PostgreSQLDialect)
ดูเหมือนว่า PostgreSQL ไม่อนุญาตให้สร้างตารางฐานข้อมูลชื่อ 'ผู้ใช้' แต่ MySQL จะอนุญาตให้สร้างตารางดังกล่าว
นั่นเป็นเพราะมันเป็นคำสำคัญ? แต่ Hibernate ไม่สามารถระบุปัญหาใด ๆ (แม้ว่าเราจะตั้งค่า PostgreSQLDialect)
คำตอบ:
user
เป็นคำสงวนและโดยปกติไม่ควรใช้คำสงวนสำหรับตัวระบุ (ตารางคอลัมน์)
หากคุณยืนยันที่จะทำคุณต้องใส่ชื่อตารางในเครื่องหมายคำพูดคู่:
create table "user" (...);
แต่แล้วคุณมักจะต้องใช้คำพูดสองเมื่ออ้างอิงโต๊ะ นอกจากนี้ชื่อตารางจะคำนึงถึงขนาดตัวพิมพ์ เป็นชื่อตารางที่แตกต่างกว่า"user"
"User"
หากคุณต้องการช่วยตัวเองให้รอดพ้นจากปัญหาให้ใช้ชื่ออื่น users
,, user_account
...
สามารถอ่านรายละเอียดเพิ่มเติมเกี่ยวกับตัวระบุที่ยกมาได้ในคู่มือ: http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
เป็นไปได้ที่จะระบุชื่อตารางด้วย JPA ด้วยไวยากรณ์ถัดไป:
@Table(name="\"user\"")
column user0_.id does not exist
เรามีเวลานี้ปัญหาเดียวกันที่ผ่านมาและเราก็เปลี่ยนชื่อตารางจากการuser
app_user
เนื่องจากการใช้ Hibernate / JPA. เราคิดว่ามันจะง่ายกว่าด้วยวิธีนี้ หวังว่าการแก้ไขเล็กน้อยนี้จะช่วยคนอื่นได้
หนึ่งสามารถสร้างตารางในสคีอื่นที่ไม่ใช่user
public
ตัวอย่าง:
CREATE SCHEMA my_schema;
CREATE TABLE my_schema.user(...);