ชื่อคอลัมน์ PostgreSQL เป็นตัวพิมพ์เล็กหรือไม่


157

ฉันมีตาราง db บอกว่าpersonsใน Postgres ส่งทีมอื่นที่มีชื่อคอลัมน์พูด, "first_Name". ตอนนี้กำลังพยายามใช้ผู้บัญชาการ PG เพื่อสืบค้นตารางนี้ในชื่อคอลัมน์นี้

select * from persons where first_Name="xyz";

และมันก็กลับมา

ข้อผิดพลาด: ไม่มีคอลัมน์ "first_Name"

ไม่แน่ใจว่าฉันกำลังทำอะไรโง่ ๆ หรือมีวิธีแก้ปัญหาที่ฉันพลาดไปหรือไม่?

คำตอบ:


284

ทุกตัวบ่งชี้ (รวมทั้งชื่อคอลัมน์) ที่ไม่ได้ยกมาสองครั้งพับกรณีที่ต่ำกว่าใน PostgreSQL ชื่อคอลัมน์ที่สร้างขึ้นด้วยเครื่องหมายคำพูดคู่และดังนั้นจึงมีตัวอักษรตัวพิมพ์ใหญ่ (และ / หรือการละเมิดไวยากรณ์อื่น ๆ ) จะต้องมีการอ้างสองครั้งสำหรับชีวิตที่เหลือของพวกเขา: ( "first_Name")

ดังนั้นใช่ชื่อคอลัมน์ PostgreSQL จะต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก:

SELECT * FROM persons WHERE "first_Name" = 'xyz';

แก้ไขเครื่องหมายคำพูดคู่ที่ไม่ถูกต้อง'xyz'ด้วย ค่า (ตัวอักษรของสตริง) จะถูกล้อมรอบในราคาเดียว

อ่านคู่มือได้ที่นี่

คำแนะนำในการยืนของฉันคือการใช้กฎหมายกรณีที่ต่ำกว่าชื่อเฉพาะเพื่อให้สองครั้งอ้างไม่จำเป็น


4
@ArtB: มาตรฐาน SQL กำหนดตัวบ่งชี้ที่ไม่คำนึงถึงขนาดตัวพิมพ์เช่นเดียวกับ Postgres ที่ใช้ ส่วนเบี่ยงเบนเท่านั้น: ตัวระบุ unquote จะถูกพับเป็นตัวพิมพ์ใหญ่ในมาตรฐาน แต่ pg ตัวพิมพ์เล็กทุกอย่างที่ไม่ได้ยกมาสองครั้ง (ที่เกี่ยวข้องเฉพาะในกรณีที่หายากมุม.) รายละเอียดในคู่มือที่นี่
Erwin Brandstetter

1
@adfs: ฉันไม่คิดว่าฉันจะอธิบายได้ดีไปกว่านี้แล้ว สำหรับข้อมูลเพิ่มเติมไปที่ลิงค์กับฉันคู่มือที่จัดไว้ให้ซ้ำ
เออร์วิน Brandstetter

15
@adfs: ใน SQL, foobar, FOOBARและFooBarเป็นตัวระบุเดียวกัน อย่างไรก็ตาม"foobar", "FooBar"และ"FOOBAR"เป็นตัวบ่งชี้ที่แตกต่างกัน
a_horse_with_no_name

5
@a_horse_with_no_name ใช่ แต่ภายใต้ SQL foobarและFOOBARเป็นเช่นเดียวกับ"FOOBAR"ภายใต้ potgresql FOOBARและfoobarฯลฯ "foobar"เป็นเช่นเดียวกับ
Jasen

1
@KamelMili: ฉันขอแนะนำให้ถามคำถามของคุณเป็นคำถามที่ให้ข้อมูลที่จำเป็นทั้งหมด ความเห็นไม่ใช่สถานที่ คุณสามารถเชื่อมโยงไปยังคำตอบนี้สำหรับบริบท และคุณสามารถแสดงความคิดเห็นพร้อมลิงค์ไปยังคำถามที่เกี่ยวข้องของคุณที่นี่ (เพื่อรับความสนใจของฉัน)
Erwin Brandstetter

16

การอ้างอิงเอกสาร :

คำสำคัญและตัวระบุที่ไม่ได้ระบุตัวพิมพ์เล็กและใหญ่ ดังนั้น:

UPDATE MY_TABLE SET A = 5;

สามารถเขียนได้เทียบเท่า:

uPDaTE my_TabLE SeT a = 5;

นอกจากนี้คุณยังสามารถเขียนได้โดยใช้ตัวบ่งชี้ที่ยกมา :

UPDATE "my_table" SET "a" = 5;

การอ้างถึงตัวระบุทำให้เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในขณะที่ชื่อที่ไม่ได้ถูกอ้างถึงจะถูกพับเป็นตัวพิมพ์เล็กเสมอ ยกตัวอย่างเช่นตัวระบุFOO, fooและ"foo"ได้รับการพิจารณาเช่นเดียวกันโดย PostgreSQL แต่"Foo"และ"FOO"แตกต่างจากที่สามเหล่านี้และอื่น ๆ

หากคุณต้องการที่จะเขียนงานแบบพกพาคุณจะได้รับคำแนะนำที่มักจะพูดชื่อเฉพาะหรือไม่เคยพูดมัน


8

ชื่อคอลัมน์ที่เป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ต้องถูกยกมาสองครั้งใน PostgresQL ดังนั้นการประชุมที่ดีที่สุดคือการติดตามกรณีเล็ก ๆ ทั้งหมดด้วยการขีดเส้นใต้


2
สิ่งนี้ไม่ถูกต้องตามคำอธิบายที่ได้รับจาก @ erwin-brandstetter
Michael Silver

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