ถ้าคอลัมน์ในตารางของ Postgres มีชื่อyear
การINSERT
ค้นหาควรดูอย่างไรเพื่อตั้งค่าสำหรับคอลัมน์นั้น
เช่น: INSERT INTO table (id, name, year) VALUES ( ... );
ให้ข้อผิดพลาดใกล้คำปี
ถ้าคอลัมน์ในตารางของ Postgres มีชื่อyear
การINSERT
ค้นหาควรดูอย่างไรเพื่อตั้งค่าสำหรับคอลัมน์นั้น
เช่น: INSERT INTO table (id, name, year) VALUES ( ... );
ให้ข้อผิดพลาดใกล้คำปี
คำตอบ:
เพียงใส่year
เครื่องหมายคำพูดคู่เพื่อหยุดการตีความเป็นคำหลัก :
INSERT INTO table (id, name, "year") VALUES ( ... );
จากเอกสารประกอบ :
มีตัวระบุประเภทที่สอง: ตัวระบุที่คั่นหรือตัวระบุที่ยกมา เกิดขึ้นจากการใส่ลำดับของอักขระโดยพลการในเครื่องหมายคำพูดคู่ (") ตัวระบุที่คั่นจะเป็นตัวระบุเสมอไม่ใช่คำสำคัญดังนั้น" select "จึงสามารถใช้เพื่ออ้างถึงคอลัมน์หรือตารางที่ชื่อ" select " ในขณะที่การเลือกที่ไม่ได้ใส่เครื่องหมายคำพูดจะถูกนำมาใช้เป็นคำสำคัญและจะทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์เมื่อใช้ในที่ที่คาดว่าจะมีชื่อตารางหรือคอลัมน์
update "user" set "password" = 'value...';
ทำงานได้ดีอย่างสมบูรณ์ ...
หากคุณไม่ได้ใส่เครื่องหมายคำพูดใน Fields / Columns ใด ๆ Postgres จะถูกลดขนาดโดยค่าเริ่มต้น และ Postgres จะข้ามการตรวจสอบคำหลักเมื่อพูดถึงชื่อคอลัมน์
ในกรณีของคุณฉันไม่คิดว่าจะต้องเพิ่มเครื่องหมายคำพูดเมื่อพูดถึงไฟล์columns
. แต่ถ้าคุณกำลังใช้keywords
(ลงทะเบียนโดย Postgres) เป็นชื่อของTable
, Schema
, Function
หรือTrigger
อื่น ๆ คุณต้องมีการใช้คำพูดสองอย่างใดอย่างหนึ่งหรือคุณสามารถระบุชื่อสกีมาด้วยจุดเรียงต่อกัน
สมมติว่าคำสั่งซื้อเป็นคำหลักที่ลงทะเบียนโดย Postgres และในบางสถานการณ์คุณต้องใช้คีย์เวิร์ดนี้เป็นชื่อตาราง
ในเวลานั้น Postgres จะอนุญาตให้คุณสร้างตารางด้วยkeywords
. นั่นคือความสวยงามของ Postgres
หากต้องการเข้าถึงตารางคำสั่งซื้อคุณต้องใช้เครื่องหมายคำพูดคู่หรือคุณสามารถใช้ชื่อสคีมาก่อนชื่อตารางได้
เช่น
1
select * from schema_name.order;
2
select * from "order";
ในทำนองเดียวกันคุณสามารถใช้ชุดค่าผสมประเภทนี้ได้ หวังว่านี่จะช่วยคุณได้
MyTable
,myTable
และmytable
มีเพียงเดียวกัน ด้วยเครื่องหมายคำพูดนี้ไม่สามารถพับได้ ดังนั้นไม่มากเช่นเดียวกับ"MyTable"
mytable