nie może uruchomić prostego wstawiania PostgreSQL

83

Próbuję wykonać proste wstawianie do tabeli postgres, ale pojawia się błąd, że wartość, którą próbuję wstawić, jest interpretowana jako nazwa kolumny

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

Gdzie id jest ustawiony jako klucz podstawowy i automatyczna inkrementacja, a nie null. To są pola, które zaznaczyłem, konfigurując tabelę w phpPgAdmin.

Otrzymuję jednak ten błąd:

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

Umieściłem nazwę mojej tabeli w podwójnych cudzysłowach, tak jak tutaj przeczytałem .

I używany DEFAULTdo automatycznej inkrementacji identyfikatora, jak przeczytałem tutaj , powinienem.

Jakieś pomysły? Dzięki!

1252748
źródło
14
użyj pojedynczych cudzysłowów dla „dealera samochodowego”.
muratgu
3
Pojedyncze cytaty. Zostaw identyfikator.
Paul Tomblin,
@muratgu, który podaje błąd:ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
1252748
@PaulTomblin jak masz na myśli „zostawić identyfikator”? Dzięki!
1252748
To znaczy tak, jak pokazuje odpowiedź @ Randy. Tyle że wygląda na to, że potrzebujesz również podwójnych cudzysłowów wokół nazwy kolumny.
Paul Tomblin,

Odpowiedzi:

167

Użyj 'auto dealer'zamiast tego. PostgreSQL interpretuje "jako cudzysłowy dla identyfikatorów, 'jako cudzysłowy dla łańcuchów.

Również:

  • Jeśli jest to nowy projekt, po prostu nie używaj tabel z mieszanymi wielkościami liter; jest to później źródłem frustracji. Zamiast móc używać dowolnej wielkości liter w instrukcjach SQL, musisz zarówno cytować nazwę identyfikatora, jak i uzyskać poprawną wielkość liter.

  • Nie ma potrzeby określania id/ DEFAULT, prosisz go, aby zrobił to, co już by zrobił. Nie spotkałem DBMS, który wymaga włączenia columnName/ DEFAULTjeśli chcesz, aby umieścić domyślną wartość w kolumnie, więc nie sądzę, że ta dodatkowa para KV sprawi, że to, co się dzieje, będzie jaśniejsze dla każdego, kto przeczyta twój kod później .

Matt
źródło
to daje mi ten błądERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
1
Prawdopodobnie utworzyłeś kolumnę w mieszanej wielkości, tak jak nazwa tabeli. W takim przypadku musisz również zacytować nazwę kolumny. Przestań używać mieszanych wielkości liter w nazewnictwie, a zaoszczędzisz każdemu wiele bólu.
Matt,
@Matt Mam ten sam problem i próba użycia pg w C ++ jest uciążliwa, gdy muszę wpisać te podwójne cudzysłowy. Czy nie ma obejścia takiego jak pewne ustawienie, które wyeliminowałoby potrzebę stosowania tych cudzysłowów?
itsols
@itsols Pierwszy punktor „Również” wyeliminowałby potrzebę cudzysłowów; definiuj swoje tożsamości tylko za pomocą [a-z0-9] i nie określaj ich jako mających jakąkolwiek szczególną wielkość (zdefiniuj bez cytowania). Następnie możesz odwoływać się do nich w dowolny sposób bez cudzysłowów na zawsze. Jeśli Ty lub ktoś inny zdecydowałeś, że nazwy tabel ze spacjami lub w przypadku wielbłąda są naprawdę ważne, ciesz się cytowaniem wszędzie!
Matt,
Punkt dobrze potraktowany Matt ... Chyba właśnie przyzwyczaiłem się do CamelCase w pewnym sensie - minęło dużo czasu (ponad 20 lat) ... Właściwie problem nie polega na podwójnym cudzysłowiu (tak, byłoby łatwiej bez tego), ale prawdziwym bólem jest ucieczka przed nimi w strunach. Nie widziałem tego, dopóki nie połączyłem C ++ i pg. W każdym razie dzięki za wkład!
itsols
9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

EDYCJA: Dodano podwójne cudzysłowy wokół nazwy kolumny

Krzykliwy
źródło
1
Cześć, dzięki. co daje ten błąd:ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748
Wygląda na to, że musisz umieścić nazwę kolumny również w podwójnych cudzysłowach. Jednym z powodów, dla których nazwy tabel z różnymi wielkościami liter w PostgreSQL są złym pomysłem.
David Faber,
@DavidFaber yeah, masz rację. utrudnia jednak czytanie… czy mogę używać myślników? ^^
1252748
1
@DavidFaber: osobiście myślę, że identyfikatory, które wymagają cytowania (np. Mieszane wielkości liter), są złym pomysłem w każdym DBMS
a_horse_with_no_name
1
Pamiętaj, że wszędzie, Z WYJĄTKIEM tworzenia identyfikatora, możesz odwoływać się do niego w mieszanej wielkości i bez cudzysłowów. Zatem do wymienionej tabeli thishasareallylongnamemożna uzyskać dostęp za pomocą select * from thisHasAReallyLongName.
Matt,
4

Postgres, Oracle itp. Oczekują, że nazwa kolumny będzie w cudzysłowie, jeśli mają mieszaną wielkość liter. Stwórz więc konwencję wszystkich małych lub samych wielkich liter w kolumnach tabeli lub użyj cudzysłowów, jak zasugerował David Faber

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
przypadkowość
źródło