PostgreSQL büyük / küçük harfe duyarlı bir veritabanı oluşturabilir mi?


10

Bazı kod Sybase PostgreSQL için bazı porting. Bu Sybase istemci kitaplığını kullanan bir C uygulamasıdır. Benim yaklaşımım çağrıları çeviren bir çeviri katmanı yazmaktır dbsqlexec()için PQexec()(örneğin). Bu kısım çoğunlukla işe yarıyor.

Sybase veritabanı, büyük / küçük harfe duyarlı bir şekilde ayarlanmıştır (veritabanı nesne adlarına göre). Örneğin, hem bir WIDGETtablo hem de bir tablo vardır widget. Bu uygulamadaki kural, büyük harf adlarının gerçek veri tablolarını gösterdiği, küçük harf adlarının ise bazı işlemler çalıştırılırken geçici tablolar olarak kullanıldığı şeklindedir.

Göre 4.1 Leksikal Yapısı , " Anahtar kelime ve tırnaksız tanımlayıcılar. Harf duyarsız Ben çift tırnak ki tanımlayıcıları küçük harfe devre dışı otomatik katlanır bilmek", ama satır katrilyonlar aracılığıyla el ile yapmak zorunda kalmak istemiyoruz Bu veritabanını kullanan kod.

PostgreSQL'i veritabanı nesne tanımlayıcıları için bu otomatik vaka katlamasını devre dışı bırakacak şekilde ayarlamanın bir yolu var mı?

Alternatifim, her SQL ifadesini inceleyen ve her tanımlayıcının (anahtar kelime olmayan) etrafına çift tırnak koyan bir kod yazmak olacaktır.


Anahtar kelimeler olabilir çift tırnaklı eğer tanımlayıcı olarak kullanılabilen - Bunu yapmamalıyız halde. Her durumda, Sybase kod tabanınızdaki bazı tanımlayıcıların PostgreSQL'deki anahtar kelimeler olmadığından emin olamazsınız. Tanımlayıcıları çift tırnak içine almak veya tercihen bunları yeniden adlandırmak için daha fazla neden.
Erwin Brandstetter

postgres'deki alıntılanmamış tanımlayıcılar aslında büyük / küçük harfe duyarlı değildir, küçük harf olarak kabul edilir. böylece tAbLeNaMe tablename adlı tek bir tabloyla eşleşir, ancak tableName adlı bir tabloyla eşleşmez. Tabloları yeniden adlandıracağım çünkü aksi takdirde insanlar "unutacak ve yanlışlıkla küçük harf sürümüne
erişecek

@JamesRyan: bu yanlış. veyaselect * from TaBlEnAmEselect * from tablenameselect * from TABLENAME
a_horse_with_no_name ile

@a_horse_with_no_name: Siz create table "tableName" (id integer primary key);ve sonra create table "tablename" (id integer primary key);bu sorgu select * from TaBlEnAmE;"tableName" değil, "tablename" arasından seçim yapar. "Alıntı yapılmayan adlar her zaman küçük harfe katlanır" .
Mike Sherrill 'Cat Recall'

Yanıtlar:


3

Ben uygulama tarafından oluşturulan SQL PostgreSQL uyumlu SQL dönüştüren bazı kod yazma sona erdi. Oldukça basit:

  • İfadeyi, tek tırnaklı dize değişmezlerini atlayarak mantıklı jetonlara bölün
  • Anahtar kelime veya sayı olmayan herhangi bir şeyi çift tırnak içine alın

Ayrıca, çağrıları dönüştürmek için bu katmandan isnullyararlandım coalesce. Şimdiye kadar gayet iyi çalışıyor.


büyük / küçük harfe duyarlı hale getirmek için tırnak işaretleri ("blahblablah") kullanıyorum .. benim için düzgün çalışıyor ..
Anuj Patel

1

PostgreSQL'i veritabanı nesne tanımlayıcıları için bu otomatik vaka katlamasını devre dışı bırakacak şekilde ayarlamanın bir yolu var mı?

Dolaylı. Sen belki nispeten küçük bir değişiklik yapmak mümkün PostgreSQL kaynak kodu ve onu yeniden derleyin. (Src / backend / parser / parser.c'de başlasın mı?) Ama çok basit olsaydı şaşırırdım.


Her şey değiştiğinde (ana bilgisayar, sürüm vb.) PostgreSQL kurulumunda özel bir değişiklik gerektireceği ve ikili kurulumların kullanılamayacağı için kaynak koduyla uğraşmak istemem.
Greg Hewgill
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.