PostgreSQL şema adının geçerli biçimlerini açıklayan belgeleri bulamıyorum. Bir şema adının yapamayacağını biliyorum:
- bir numara ile başla
- boşluk var
- ile başla
pg_
Başka? Nereye bakmalıyım?
PostgreSQL şema adının geçerli biçimlerini açıklayan belgeleri bulamıyorum. Bir şema adının yapamayacağını biliyorum:
pg_Başka? Nereye bakmalıyım?
Yanıtlar:
İnce Başına dokümantasyon , ben düşünüyorum bu aradığınız şey olabilir.
SQL tanımlayıcıları ve anahtar kelimeler bir harfle (az, aynı zamanda aksan işaretleri ve Latin alfabesi olmayan harfler içeren harfler) veya bir alt çizgi (_) ile başlamalıdır. Bir tanımlayıcıdaki veya anahtar kelimedeki sonraki karakterler harfler, alt çizgiler, rakamlar (0-9) veya dolar işaretleri ($) olabilir. SQL standardının harfine göre tanımlayıcılarda dolar işaretlerine izin verilmediğini unutmayın, bu nedenle kullanımları uygulamaları daha az taşınabilir hale getirebilir ...
pg_Nathan C'nin bahsettiği gibi bu bağlantıya alt çizgi eklemek isteyebilir .
Belgelere göre , pg_rezerve edildiği gibi başlayamaz . Bunun dışında oldukça serbest görünüyor.
this-is schemave yine de geçersiz bir şema adı olurdu.
Doğru cevap gsiems tarafından verilen cevaptır. Ancak, PostgreSQL'in aklınızda tutabileceğiniz alıntı tanımlayıcılar üzerinde kurallara sahip olduğunu belirtmek istiyorum. "Alıntılanan tanımlayıcılar sıfır kodlu karakter dışında herhangi bir karakter içerebilir. (Bir çift tırnak eklemek için iki çift tırnak yazın.)" ... Ayrıca bakmak isteyebileceğiniz durumda bazı kısıtlamalar da vardır.
Dolayısıyla, tanımlayıcılarınızı alıntılayacaksanız, istediğiniz karakteri kullanabilirsiniz (\ 0 hariç). Ancak, tanımlayıcılarınızı alıntılamıyorsanız, o sayfada belirtilen kurallara uymanız gerekir.
Ben daha önce ısırıldı çünkü özellikle işaret etmek istedim, özellikle alıntı olmayan tanımlayıcıları (ve şema adları tanımlayıcı olarak sayılır) dava ile ilgili kurallar.
GÜNCELLEME:
Örnek olarak (şema tanımlayıcıları için özel olarak geçerli değil, aynı şekilde onlar için de geçerlidir):
DROP TABLE "tbluser"; -- assuming it exists
DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
CREATE TABLE "TBLUSER" ( username text );
INSERT INTO "TBLUSER" VALUES ( 'joe' );
SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
SELECT * FROM "TBLUSER"; -- works fine
Bu, PostgreSQL (ve belki de SQL standartları) konusunda deneyimli olanlar için beklenen bir davranış olabilir, ancak PG'de yeni olan ve diğer veritabanı sunucuları (örneğin SQL Server veya Oracle) açısından gelen biri bu davranışa çarpabilir ve yeni oluşturdukları masanın neden eksik olduğunu merak ediyorum.
Belki bazı kılavuzları alıntı tanımlayıcıları kullanarak karşı tavsiye ederim, ama işin gerçeği alıntı tanımlayıcılar kullanımı için mevcuttur ve olmasıdır edebilirsiniz olmayan ilişkiler oluşturma ve erişirken ayrıca kullanılacak ve birçok paketler her zaman alıntılanan kullanmak tanımlayıcılar bunu bir politika yapmak tamamen küçük harf, örneğin PGAdmin III.
Örneğin, kullanıcı arabirimi aracılığıyla bir tablo oluştururken PGAdmin III tarafından oluşturulan komut dosyasıdır:
CREATE TABLE public."TBLUSER"
(
username text
)
WITH (
OIDS = FALSE
)
;
Bu nedenle, bir kullanıcının bir sorguda bu tabloya erişebilmesinin tek yolu, tırnak içine alınmış kimliğine, yani "TBLUSER". Tırnak içine alınmamış bir tanımlayıcı ile bir sorguda bu tabloya erişmeye çalışmak, ilişkinin bulunamamasına neden olur TBLUSER.