PostgreSQL sütun adları büyük / küçük harfe duyarlı mı?


157

Bir db tablo var, personsPostgres sütun adı olan başka bir takım tarafından teslim, demek "first_Name". Şimdi bu sütun adındaki bu tabloyu sorgulamak için PG komutanı kullanmaya çalışıyorum.

select * from persons where first_Name="xyz";

Ve sadece geri dönüyor

HATA: "first_Name" sütunu mevcut değil

Aptalca bir şey yapıyorum mu yoksa eksik olduğum bu sorunun bir çözümü var mı?

Yanıtlar:


284

Çift tırnak işaretli olmayan tüm tanımlayıcılar (sütun adları dahil) PostgreSQL'de küçük harfe katlanır. Çift tırnak işareti ile oluşturulan ve böylece büyük harfleri (ve / veya diğer sözdizimi ihlallerini) koruyan sütun adlarının ömürleri boyunca çift tırnak içine alınması gerekir: ( "first_Name")

Yani, evet , PostgreSQL sütun adları küçük harf duyarlıdır:

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

Ayrıca yanlış çift tırnakları da düzeltin 'xyz'. Değerler (dize değişmez değerleri) tek tırnak içine alınır .

Buradaki kılavuzu okuyun.

Daimi tavsiyem, yasal, küçük harfli isimleri özel olarak kullanmaktır, bu nedenle çift tırnak gerekli değildir.


4
@ArtB: SQL standardı, tıpkı Postgres'in uyguladığı gibi, büyük / küçük harfe duyarlı olmayan tanımlayıcıları tanımlar. Tek sapma: alıntılanmamış tanımlayıcılar standartta büyük harfe katlanır, ancak pg küçük harflerle çift tırnaklı olmayan her şey. (Sadece nadir köşe durumlarında geçerlidir.) Bu kılavuzdaki ayrıntılar.
Erwin Brandstetter

1
@adfs: Bunu zaten yaptığımdan daha iyi açıklayabileceğimi sanmıyorum. Daha fazla bilgi için, tekrar tekrar verdiğim el kitabının bağlantısını takip edin.
Erwin Brandstetter

15
@adfs: SQL, foobar, FOOBARve FooBaraynı tanımlayıcı vardır. Ancak "foobar", "FooBar"ve "FOOBAR"farklı tanımlayıcılardır
a_horse_with_no_name

5
evet, ama SQL altında @a_horse_with_no_name foobarve FOOBARaynıdır "FOOBAR"potgresql altında FOOBARve foobarvb aynıdır "foobar".
Jasen

1
@KamelMili: Gerekli tüm bilgileri vererek sorunuzu soru olarak sormanızı öneririm . Yorumlar yer değil. Bağlam için her zaman bu cevaba bağlantı verebilirsiniz. Ve burada ilgili sorunuzun bağlantısını içeren bir yorum bırakabilirsiniz (ayrıca dikkatimi çekmek için).
Erwin Brandstetter

16

Alıntı belgelere :

Anahtar kelimeler ve alıntılanmamış tanımlayıcılar büyük / küçük harfe duyarlı değildir. Bu nedenle:

UPDATE MY_TABLE SET A = 5;

eşdeğer olarak şu şekilde yazılabilir:

uPDaTE my_TabLE SeT a = 5;

Alıntılı tanımlayıcıları kullanarak da yazabilirsiniz :

UPDATE "my_table" SET "a" = 5;

Bir tanımlayıcıyı tırnak işareti büyük / küçük harfe duyarlı hale getirirken, alıntılanmamış adlar her zaman küçük harfe katlanır (alıntılanmamış adların büyük harfe katlandığı SQL standardının aksine). Örneğin, tanımlayıcılar FOO, foove "foo"PostgreSQL tarafından aynı kabul edilir, ancak "Foo"ve "FOO"bu üç ve birbirinden farklıdır.

Taşınabilir uygulamalar yazmak istiyorsanız, her zaman belirli bir isim vermeniz veya asla teklif vermemeniz tavsiye edilir.


8

Büyük / küçük harf veya büyük harf olan sütun adlarının PostgresQL'de çift tırnak içine alınması gerekir. Bu yüzden en iyi konvansiyon tüm alt çizgileri alt çizgi ile takip etmek olacaktır.


2
@ Erwin-brandstetter
Michael Silver

9
Bu nasıl yanlış? Büyük / küçük harf veya büyük harf olan sütun adlarınız varsa, bunlara başvurmak için tanımlayıcıyı çift tırnak içine almanız gerekir.
theferrit32
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.