Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[postgreSQL] Nazwy obiektów w cudzysłowach?

670 views
Skip to first unread message

jerry

unread,
Nov 16, 2008, 9:11:55 AM11/16/08
to
Witam,
W phpPgAdminie, czy też w pgAdminie zapytanie typu:
select * from "Tabela" zwraca poprawny wynik, natomiast
select * from Tabela zwraca błąd - brak relacji tabela.

Czy w PGSQL istnieje konieczność ujmowania obiektów w znaki "XXXXXX"?
Przykłady w manualu są bez "". Pytam w kontekście wywoływania zapytań z
aplikacji - pakowanie każdej kolumny, nazwy tabeli, schematu w "" będzie
uciążliwe.
Jeśli to kwestia ustawień to bardzo proszę o wskazanie gdzie to zmienić.
Korzystam z wersji 8.1.14

szymon

unread,
Nov 16, 2008, 10:37:18 AM11/16/08
to
Dnia 2008-11-16, nie o godzinie 15:11 +0100, jerry pisze:

Nie ma potrzeby, ale ujęcie w cudzysłowy powoduje użycie takiej nazwy
jaka jest podana. Użycie bez cudzysłowu powoduje, że wewnętrznie
postgres zamieni nazwę na małe (albo duże, nie pamietam, przyjmijmy, że
małe) litery.

Jak zrobisz: CREATE TABLE GuZiK; to wtedy możesz do tej tabeli odwoływać
się przez:

guzik
GUZIK
GUzik

ale jak zrobisz: CREATE TABLE "GuZiK", to jedyną poprawną formą
odwołania będzie "GuZiK".


szymon

Sławomir Szyszło

unread,
Nov 16, 2008, 10:38:17 AM11/16/08
to
Dnia Sun, 16 Nov 2008 15:11:55 +0100, jerry <j...@interia.pl> wklepał(-a):

>Witam,
>W phpPgAdminie, czy też w pgAdminie zapytanie typu:
>select * from "Tabela" zwraca poprawny wynik, natomiast
>select * from Tabela zwraca błąd - brak relacji tabela.

A przypadkiem nie utworzyłeś tej tabeli wpisując nazwę w cudzysłowach? Wtedy
wielkość liter ma znaczenie.
--
Sławomir Szyszło
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?group=pl.comp.bazy-danych

jerry

unread,
Nov 16, 2008, 10:48:39 AM11/16/08
to

> A przypadkiem nie utworzyłeś tej tabeli wpisując nazwę w cudzysłowach? Wtedy
> wielkość liter ma znaczenie.

Tak zrobiłem. Jednak jestem tego świadom i w zapytaniu pilnuję wielkości
liter. Dziwi mnie jednak, żę mając tabelę utworzoną jak niżej:

CREATE TABLE "Tabela"
(
"Id" integer NOT NULL DEFAULT nextval(......)
}

zapytanie

select * from Tabela ;
zwraca: ERROR: relation "tabela" does not exist - proszę zwrócić uwagę,
że wypisał 'tabelę' z małych liter i rzeczywiście takiej nie ma...

natomiast

select * from "Tabela";
daje pożądany wynik.

jerry

unread,
Nov 16, 2008, 10:53:11 AM11/16/08
to

> Jak zrobisz: CREATE TABLE GuZiK; to wtedy możesz do tej tabeli odwoływać
> się przez:
>
> guzik
> GUZIK
> GUzik
>
> ale jak zrobisz: CREATE TABLE "GuZiK", to jedyną poprawną formą
> odwołania będzie "GuZiK".


czyli - jak opisywałem niżej Sławkowi, tworząc tabelę "Tabela" mogę się
do niej odwołać jedynie poprzez "Tabela", gdyż wpisując bez cudzysłowów
Tabela wewnętrznie postgres zamieni mi to na tabela i wywali błąd że
relacja tabela nie istnieje.
Dobrze rozumiem?

Rozwiązania:
- zmienić w skrypcie zakładającym tabele nazwy na małe litery i pomijać
"" w zapytaniach sql;
- zostawić jak jest ale wszystkie obiekty w zapytaniach sql muszą być w "";
- inne?

Sławomir Szyszło

unread,
Nov 16, 2008, 10:59:45 AM11/16/08
to
Dnia Sun, 16 Nov 2008 16:48:39 +0100, jerry <j...@interia.pl> wklepał(-a):

>Tak zrobiłem. Jednak jestem tego świadom i w zapytaniu pilnuję wielkości
>liter. Dziwi mnie jednak, żę mając tabelę utworzoną jak niżej:
>
>CREATE TABLE "Tabela"
>(
> "Id" integer NOT NULL DEFAULT nextval(......)
>}
>
>zapytanie
>
>select * from Tabela ;
>zwraca: ERROR: relation "tabela" does not exist - proszę zwrócić uwagę,
>że wypisał 'tabelę' z małych liter i rzeczywiście takiej nie ma...

Bo jak wpiszesz bez cudzysłowów to widać zamienia litery na małe i takich szuka
w słowniku systemowym.

Sławomir Szyszło

unread,
Nov 16, 2008, 11:13:55 AM11/16/08
to
Dnia Sun, 16 Nov 2008 16:53:11 +0100, jerry <j...@interia.pl> wklepał(-a):

>Rozwiązania:
>- zmienić w skrypcie zakładającym tabele nazwy na małe litery i pomijać
>"" w zapytaniach sql;
>- zostawić jak jest ale wszystkie obiekty w zapytaniach sql muszą być w "";
>- inne?

Zrób tak jak większość - nie wymuszaj wielkości liter w nazwach. Mnie by szlag
trafił, jakbym dla każdej tabeli i kolumny musiał cudzysłowy dopisywać.

Marcin

unread,
Nov 16, 2008, 2:25:11 PM11/16/08
to
Sławomir Szyszło wrote:
> Dnia Sun, 16 Nov 2008 16:53:11 +0100, jerry <j...@interia.pl> wklepał(-a):
>
>>Rozwiązania:
>>- zmienić w skrypcie zakładającym tabele nazwy na małe litery i pomijać
>>"" w zapytaniach sql;
>>- zostawić jak jest ale wszystkie obiekty w zapytaniach sql muszą być w "";
>>- inne?
>
> Zrób tak jak większość - nie wymuszaj wielkości liter w nazwach. Mnie by szlag
> trafił, jakbym dla każdej tabeli i kolumny musiał cudzysłowy dopisywać.

Nie wiem dlaczego tak uparcie stosuje się te "", edytory baz danych też
często domyślnie używają "", to tak jak w niektórych
językach programowania z rozróżnianiem wielkości znaków w nazwach
zmiennych/funkcji - używanie PobierzDane() i pobierzDane() jest przecież
prostą drogą do katastrofy.

M.

szymon

unread,
Nov 17, 2008, 3:26:16 AM11/17/08
to
Dnia 2008-11-16, nie o godzinie 20:25 +0100, Marcin pisze:

Cudzysłowy nie są aż takie złe, nie ma innego sposobu utrzworzenia
tabeli "tabela" albo tabeli: "select". A niektórzy tak robią. Poza tym
jak generujesz przenośnego sqla, to nie wiesz czy w innej bazie słowo
guzik nie jest zastrzeżone i wtedy cały model idzie sobie gdzieś daleko.
Jak robisz tabele o nazwach "guzik" to nie ma problemu, możesz potem
odwoływać się do tego przez guzik i będzie dobrze. Ogólnie należy używać
małych liter i będzie to bardziej przenośne, nawet jak użyjesz
cudysłowów.

szymon

Artur Muszyński

unread,
Nov 17, 2008, 4:37:04 AM11/17/08
to
szymon pisze:

> Cudzysłowy nie są aż takie złe, nie ma innego sposobu utrzworzenia
> tabeli "tabela" albo tabeli: "select". A niektórzy tak robią.

"Niektórzy" zabrzmiało, jak nagana. Czy kolumny o nazwach `left`,
`order` (notacja z MySQL) itp nie są powszechne?

artur

A.L.E.C

unread,
Nov 17, 2008, 4:45:54 AM11/17/08
to

Nie są, podobnie jak auta bez hamulca ręcznego. Chciałbyś za każdym
razem wychodząc z auta pamiętać, że musisz podłożyć cegłę pod koła?

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl
Roundcube Webmail Project Developer http://roundcube.net

Artur Muszyński

unread,
Nov 17, 2008, 12:03:43 PM11/17/08
to
A.L.E.C pisze:

> Artur Muszyński wrote:
>> szymon pisze:
>>> Cudzysłowy nie są aż takie złe, nie ma innego sposobu utrzworzenia
>>> tabeli "tabela" albo tabeli: "select". A niektórzy tak robią.
>>
>> "Niektórzy" zabrzmiało, jak nagana. Czy kolumny o nazwach `left`,
>> `order` (notacja z MySQL) itp nie są powszechne?
>
> Nie są, podobnie jak auta bez hamulca ręcznego. Chciałbyś za każdym
> razem wychodząc z auta pamiętać, że musisz podłożyć cegłę pod koła?

Nie są, kiedy projektujesz po polsku. Ja mam tabelki:
objects (id, ..., left, top, width, height)
schedule (id, object_id, ..., order)
I co, takie dziwne? Czerwona lampka wcale mi się nie zapaliła, dopiero
jak dostałem wyjątek w kodzie. Jak używasz psql-a, to szybko cię szlag
trafi i zamienisz nazwy, ale wiele osób używa narzędzi wizualnych, na
których problemu nie widać.

artur

Sławomir Szyszło

unread,
Nov 17, 2008, 2:04:00 PM11/17/08
to
Dnia Mon, 17 Nov 2008 09:26:16 +0100, szymon <ne...@mabateus.pl_WITHOUT>
wklepał(-a):

>Cudzysłowy nie są aż takie złe, nie ma innego sposobu utrzworzenia
>tabeli "tabela" albo tabeli: "select". A niektórzy tak robią. Poza tym
>jak generujesz przenośnego sqla, to nie wiesz czy w innej bazie słowo
>guzik nie jest zastrzeżone i wtedy cały model idzie sobie gdzieś daleko.
>Jak robisz tabele o nazwach "guzik" to nie ma problemu, możesz potem
>odwoływać się do tego przez guzik i będzie dobrze. Ogólnie należy używać
>małych liter i będzie to bardziej przenośne, nawet jak użyjesz
>cudysłowów.

Wystarczy sobie wymyślić stały przedrostek do nazwy tabeli i wtedy
prawdopodobieństwo trafienia na słowo kluczowe spada do zera.

np. RTY_OSOBY, RTY_SLOWNIK

Łatwiej też wtedy przechowywać tabele z różnych aplikacji w jednym schemacie.

0 new messages