basit PostgreSQL eklentisinin çalışması sağlanamıyor


83

Postgres tablosuna basit bir ekleme yapmaya çalışıyorum, ancak eklemeye çalıştığım değerin sütun adı olarak yorumlandığına dair bir hata alıyorum

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")

İd'nin birincil anahtar ve otomatik artış olarak ayarlandığı, boş değil. PhpPgAdmin'de tabloyu kurduğumda işaretlediğim kutular bunlar.

Yine de bu hatayı alıyorum:

ERROR: ERROR: column "auto dealer" does not exist
Query = INSERT
INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT,
"auto dealer")

Tablo adımı çift tırnak içine aldım, burada okuduğum gibi .

Ve buradaDEFAULT okuduğum gibi kimliği otomatik olarak artırmak için kullanılırdı .

Herhangi bir fikir? Teşekkürler!


14
'otomobil satıcısı' için tek tırnak kullanın.
muratgu

3
Tek tırnak. Kimliği bırak.
Paul Tomblin

Hatayı veren @muratgu:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748

@PaulTomblin "kimliği bırak" demek nasıl oluyor? Teşekkürler!
1252748

Demek istediğim, @ Randy'nin cevabında göründüğü gibi. Sütun adının etrafında çift tırnağa ihtiyacınız varmış gibi görünüyor.
Paul Tomblin

Yanıtlar:


167

'auto dealer'Bunun yerine kullanın . PostgreSQL ", tanımlayıcılar 'için alıntılar, dizeler için alıntılar olarak yorumlar.

Ayrıca:

  • Bu yeni bir projeyse, karışık durum tabloları kullanmayın; daha sonra bir hayal kırıklığı kaynağıdır. SQL ifadelerinizde herhangi bir durumu kullanabilmek yerine, hem tanımlayıcı adını alıntı yapmalı hem de durumu doğru anlamalısınız.

  • id/ Belirtmenize gerek yok DEFAULT, ondan zaten yapacağı şeyi yapmasını istiyorsunuz. Sütuna varsayılan değeri eklemenizi columnName/ eklemenizi gerektiren bir DBMS ile tanışmadım DEFAULT, bu yüzden bu ekstra KV çiftinin, kodunuzu daha sonra okuyanlara olanları daha net hale getireceğini düşünmüyorum .


bu bana bu hatayı veriyorERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748

1
Muhtemelen sütunu tablo adı gibi karışık harflerle oluşturdunuz. Bu durumda, sütun adını da alıntı yapmalısınız. Adlandırmada karışık harf kullanmayı bırakın ve herkesi çok fazla acıdan kurtaracaksınız.
Matt

@Matt Aynı sorunla karşılaşıyorum ve pg'yi C ++ ile kullanmaya çalışmak, bu çift tırnak işaretlerini yazmam gerektiğinde bir acı. Bu alıntılara olan ihtiyacı ortadan kaldıracak bir ayar gibi bir geçici çözüm yok mu?
itsols

@itsols "Ayrıca" nın Fist bulleti, alıntı yapma ihtiyacını ortadan kaldıracaktır; Kimliklerinizi yalnızca [a-z0-9] kullanarak tanımlayın ve bunları herhangi bir özel durumu içerecek şekilde belirtmeyin (alıntı yapmadan tanımlayın). O zaman sonsuza kadar alıntı yapmadan onlara istediğiniz gibi başvurabilirsiniz. Siz veya bir başkası boşluklu veya deve kılıflı tablo isimlerine sahip olmanın gerçekten önemli olduğuna karar verdiyseniz, her yerde alıntı yaparak eğlenin!
Matt

İyi değerlendirildi Matt ... Sanırım bir şekilde CamelCase'e alıştım - uzun zaman oldu (20 yıldan fazla) ... Aslında sorun çift alıntı yapmak değil (evet, daha kolay olurdu onsuz), ama gerçek acı onlardan dizeler halinde kaçmak zorunda kalmaktır. C ++ ve pg'yi bir araya getirene kadar bunun geldiğini görmedim. Yine de girdileriniz için teşekkürler!
itsols

9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

DÜZENLEME: Sütun adının etrafına çift tırnak eklendi


1
Merhaba teşekkürler. bu şu hatayı verir:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748

Sütun adını da çift tırnak içine almanız gerekiyor gibi görünüyor. PostgreSQL'deki karışık durum tablo adlarının kötü bir fikir olmasının bir nedeni.
David Faber

@DavidFaber evet, haklısın. yine de okumayı biraz zorlaştırıyor .. tire kullanabilir miyim? ^^
1252748

1
@DavidFaber: şahsen ihtiyacı (örneğin karışık durumda) alıntı olduğunu tanımlayıcılar kötü bir fikir olduğunu düşünüyorum herhangi bir VTYS
a_horse_with_no_name

1
Tanımlayıcıyı oluştururken HARİÇ her yerde, buna karma durumda ve tırnak işaretleri olmadan başvurabileceğinizi unutmayın. Böylece adlı tabloya thishasareallylongnamekullanılarak erişilebilir select * from thisHasAReallyLongName.
Matt

4

Postgres, Oracle vb., Büyük / küçük harf karışıksa sütun adının tırnak içinde olmasını bekler. Dolayısıyla, tablo sütunlarınız için tümü küçük veya tümü büyük harf içeren bir kural oluşturun veya David Faber'in önerdiği gibi tırnak işaretlerini kullanın

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
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.