Postgres'te anahtar kelime benzeri sütun adlarından kaçış


135

Postgres tablosundaki sütunun adı varsa year, INSERTbu sütunun değerini ayarlamak için sorguya nasıl bakılmalıdır ?

Örneğin: yıl kelimesine INSERT INTO table (id, name, year) VALUES ( ... );yakın bir hata veriyor .

Yanıtlar:


212

Anahtar kelimeyear olarak yorumlanmasını engellemek için çift tırnak içine almanız yeterlidir :

INSERT INTO table (id, name, "year") VALUES ( ... );

Gönderen belgeler :

İkinci bir tür tanımlayıcı vardır: sınırlandırılmış tanımlayıcı veya alıntılanmış tanımlayıcı. Çift tırnak (") içine rastgele bir karakter dizisi eklenerek oluşturulur. Sınırlandırılmış bir tanımlayıcı her zaman bir tanımlayıcıdır, asla bir anahtar kelime değildir. Bu nedenle" seç "," seç "adlı bir sütuna veya tabloya atıfta bulunmak için kullanılabilir, tırnaksız bir seçim anahtar kelime olarak alınacak ve bu nedenle bir tablo veya sütun adının beklendiği yerde kullanıldığında bir ayrıştırma hatasına neden olacaktır.


44
Bazı uyarılar: PostgreSQL tırnak işaretleri olmadan tüm tanımlayıcıları küçük harfe çevirir. MyTable, myTableVe mytablesadece aynıdır. İle tırnak bu katlama yapılmaz. Artık "MyTable"aynı şey değil mytable.
AH

19
Daha da iyisi, tanımlayıcı olarak ayrılmış sözcükleri veya büyük / küçük harfleri karışık kullanmaktan kaçının ve asla çift tırnak kullanmak veya garip hata mesajları almak zorunda kalmayacaksınız.
Erwin Brandstetter


8
@ErwinBrandstetter Problem, kurulu bir proje üzerinde çalıştığınız zamandır.
ceruleus

5
@ HoàngLong evet öyle. update "user" set "password" = 'value...';... mükemmel çalışıyor
Phill

0

Herhangi bir Alan / Sütunda tırnak işareti sağlamıyorsanız, varsayılan olarak Postgres tarafından küçük harfle yazılacaktır. Ve Postgres, sütun adı söz konusu olduğunda anahtar kelimeyi kontrol etmeyi atlayacaktır.

Sizin durumunuzda, söz konusu olduğunda alıntı eklemenin zorunlu olduğunu düşünmüyorum columns. Kullandığınız Ama eğer keywordsadı olarak (Postgres tarafından kaydedilen) Table, Schema, Functionveya Triggervs, ya çift tırnak kullanmak zorunda gerekir, yoksa nokta birleştirme aracılığı ile şema adını belirtebilirsiniz.

Diyelim ki, sipariş Postgres tarafından kaydedilen anahtar kelimedir. Ve bazı senaryolarda, bu anahtar kelimeyi tablo adı olarak kullanmanız gerekir.

O zaman, Postgres ile bir tablo oluşturmanıza izin verecektir keywords. Postgres'in güzelliği budur.

Sipariş tablosuna erişmek için, ya Çift tırnak kullanmanız gerekir ya da tablo adından önce şema adı verebilirsiniz.

ÖRNEĞİN

1.

select * from schema_name.order;

2.

select * from "order";

Aynı şekilde, bu tür bir kombinasyonu da kullanabilirsiniz. Umarım bu sana yardımcı olur.

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.