PostgreSQL Çift Tırnak Sorunu

Aslında SQL standardı, SQL sorgularının ve tanımlayıcılarının (örn. tablo adları) büyük/küçük harfe duyarlı olmadığını belirtir. Yani aralarında bir fark yoktur.

PostgreSQL Çift Tırnak Sorunu

Joe Celko'nun SQL sorgularında büyük harf kullanımı tavsiyesi :

  1. SQL anahtar kelimeleri TÜMÜ BÜYÜK HARF içindedir,
  2. Tablo adlarında Başlangıç ??Büyük Harfleri vardır ve
  3. Sütun adlarının tümü küçük harfle yazılmıştır.

 

SELECT id, email FROM people;

  sorgusu yukarıdaki kurala göre aşağıdaki gibi yazılmalı.

SELECT id, email FROM People;

 

Aslında SQL standardı, SQL sorgularının ve tanımlayıcılarının (örn. tablo adları) büyük/küçük harfe duyarlı olmadığını belirtir. Yani aralarında bir fark yoktur.

Yine, bu büyük harf kullanımı şeması PostgreSQL tarafından tamamen göz ardı edilir. Tüm bunlar, kodumuzu yolun aşağısında okuyabilmek isteyen geliştiriciler olarak bizim yararımıza.

Aslında, bu tamamen doğru değil: PostgreSQL, durumu tam olarak görmezden gelmez, bunun yerine tüm bu isimleri küçük harf olmaya zorlar.

CREATE TABLE People (
  id SERIAL NOT NULL,
  email TEXT NOT NULL,
  PRIMARY KEY(id)
);
   

PostgreSQL, tümü küçük harfle "People" adında bir tablo oluşturacaktır. Ancak PostgreSQL'in çalışma şekli nedeniyle, tüm isimleri küçük harfe zorlayarak şunu söyleyebilirim:

SELECT * FROM People;

  gayet iyi çalışacak.

Şimdi, bunu aşmanın bir yolu var, yani çift tırnak kullanmak. PostgreSQL'de bir metin dizesi oluşturmak için tek tırnak kullanılırken, bir tanımlayıcıyı büyük/küçük harf değiştirmeden adlandırmak için çift tırnak kullanılır.

Pek çok insan bunu yanlış anlıyor: PostgreSQL'de tek tırnak ve çift tırnak tamamen farklı işlere sahiptir ve tamamen farklı veri türleri döndürür. Tek tırnak, metin dizelerini döndürür. Çift tırnak işaretleri (bunları gerçekten herhangi bir şeyi "döndüren" olarak düşünebiliyorsanız) tanımlayıcıları döndürür, ancak büyük/küçük harf korunur.

Bu nedenle, yukarıdaki tablo oluşturma sorgusunu tekrar edecek olsam, ancak çift tırnak işareti kullansaydım:

CREATE TABLE "People" (
 id SERIAL NOT NULL,
 email TEXT NOT NULL,
 PRIMARY KEY(id)
);

  

Şimdi tablo adı zorla küçük harflere çevrilmeyecek bir tablo oluşturduk, ancak aşağıdaki sorgu şimdi P harfi yüzünden başarısız olacak.

SELECT * FROM people;

ERROR: relation "people" does NOT exist
LINE 1: SELECT * FROM people;

   

Başarısız çünkü bir "People" tablosu oluşturdum, ancak PostgreSQL'e bir "people" tablosu aramasını söyledim. Kafa karıştırıcı değil mi? Kesinlikle. Bir tablo, sütun, dizin veya başka bir nesneyi oluştururken adında çift tırnak kullanırsanız ve bu tanımlayıcıda bir büyük harf bile varsa, onu her kullandığınızda çift tırnak kullanmanız gerekecektir. Bu, katılan herkes için sinir bozucu - bu, daha önce bahsettiğim nice büyük harf kullanım kurallarını kullanamayacağımız ve çeşitli sorguların aniden çalışmayacağı anlamına geliyor.

Sonuç olarak, bir şey oluştururken çift tırnak kullanmaktan kaçınmaktır. Aslında, bir şeyleri alırken de çift tırnaktan kaçınmalısınız - aksi takdirde, PostgreSQL'in var olduğuna inanmadığı bir sütunu almaya çalıştığınızı keşfedebilirsiniz.

Şimdi, bu tavsiyeyi beğendiğinizi ve onu ciddiye almaya çalıştığınızı varsayalım. Ne yazık ki, tüm çabalarınıza rağmen hala yamulacağınız yerler var.

Örneğin, PostgreSQL yönetimi için GUI aracı olan PGAdmin 3 birçok kişi tarafından kullanılmaktadır. (Ben eski tarz bir Unix adamıyım ve bu nedenle metinsel “psql” istemcisini tercih ederim.) Yıllar içinde PGAdmin'in veritabanlarınızı yönetmenin yararlı ve kolay bir yolu olabileceğini keşfettim, aynı zamanda tablolar oluştururken otomatik olarak çift tırnak kullandığını da keşfettim. Bu, PGAdmin ile bir tablo oluşturursanız, daha sonra onu bulmakta veya sorgulamakta zorlanabileceğiniz anlamına gelir.

Başka bir hayal kırıklığı kaynağı, en yaygın olarak Ruby on Rails'de kullanılan Active Record ORM'dir (nesne-ilişkisel eşleyici). Active Record, tablo ve sütun adları varsayılan olarak büyük/küçük harf duyarlı olan MySQL kullanıcıları tarafından geliştirildiğinden, Active Record otomatik olarak sorgulardaki tüm tablo ve sütun adlarının etrafına çift tırnak işareti koyar. Bu sinir bozucu uyumsuzluklara yol açabilir - örneğin Ruby'deki sütuna CamelCase kullanarak erişmek istiyorsunuz, ancak veritabanında büyük / küçük harfe duyarsılığı var, gibi.

PostgreSQL harika bir veritabanıdır ve her türden harika yeteneklere sahiptir. Tanımlayıcılarınızın büyük/küçük harfe duyarlı olmasını gerçekten istemiyorsanız, çift tırnak kullanmaktan kaçınmanızı şiddetle tavsiye ederim. Sütunlarla çalışırken sorunlarla karşılaşırsanız, sorguların çift tırnak kullanılarak gönderilip gönderilmediğini görmek için veritabanı Loglarını kontrol edin.

Kaynak

Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...