Przemysław S.

Przemysław S. Geoinformacja,
INSPIRE, liczenie
bobrów, zawracanie
rzeki...

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

witam

mam taki mały problem:

posługuje się widokami aby zestawić ze sobą tabelę opisową z geometrią - obie kojarzone sa ze sobą poprzez pole GUID . Wszystko jest w porządku do czasu jak pojawi się rekord w tabeli opisowej z powielonym GUID (co czasem jest konieczne - np opisujac dwa razy ten sam punkt w czasie) dzieki temu w widoku w polu "gid" pojawiają sie dwie te same wartości i już np program QUANTUM GIS nie czyta tego widoku jako warstwy wektorowej, ponieważ nie potrafi znaleźć pola z unikatowym kluczem (do tej pory funkcję tego pola pełni "gid".

mój widok wygląda mniej wiecej tak (tabele gady_pft z geometrią i gadyobse z opisami):

CREATE OR REPLACE VIEW gatunki.gady_pft_obse AS
SELECT gady.gid, gady.gat, gady.the_geom, gady.nazwa_lac, gady.nazwa_pol, gady.uwagi_1, gady.uwagi_2, obs.lcz, obs.jdnlcz, obs.datobs, obs.guid_
FROM gatunki.gady_pft gady
FULL JOIN gatunki.gadyobse obs ON gady.guid_::text = obs.guid_::text;

jak widać "gid" służący w widoku jako pole klucza pobiera mi z tabeli w której gromadzona jest geometria (nie moge pobrac go z opisówki bo często nie mam opisów dla każdej geometrii)

problem rozwiązało by dodanie jakiegoś pola które mogło by zliczyć rekordy - próbowąłem coś z row_number(*) ale nie potrafie sobie z tym poradzić w moim widoku.

ma ktoś moze jakis pomysł - nie jestem specjalista z baz danych więc mój problem moze razić ale naprawdę nie wiem jak sobie z tym poradzić.

pozdrawiam przemek
Jakub Fila

Jakub Fila Inżynieria / finanse
/ zarządzanie

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

Najprościej byłoby rozszerzyć klucz, np. o INT Unique ID, które byłoby wstawiane z sekwencji. Wtedy (jeśli dobrze rozumiem zagadnienie) GUID jednoznacznie identyfikowałby punkt w przestrzeni, podczas, gdy Unique ID identyfikowałoby go w przestrzeni i czasie. Oczywiście zamiast Unique ID możesz użyć czasu wstawienia/modyfikacji rekordu.

Podane powyżej rozwiązanie ma 2 zalety i 1 wadę:
zalety:
- rozszerza klucz i wprowadza brakującą zależność funkcyjną
- nie powoduje denormalizacji

wady:
- wymaga zmian w tabeli, a nie tylko w widoku (no chyba, że już właściwe ID istnieje w tabeli).

Pytanie tylko, czy w Quantum GIS możesz dokonać przemapowania na złożony klucz?
Przemysław S.

Przemysław S. Geoinformacja,
INSPIRE, liczenie
bobrów, zawracanie
rzeki...

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

witam

dzieki za odpowiedź. Qgis nie ma możliwości zmiany odczytu struktury danych z postgisa. Przy odczycie sam poszukuje pola które mu odpowieda za primary key i to wszystko. Przynajmniej ja o niczym innym nie wiem

tez zastanawialem sie czy tego nie moze zrobić sekwencja ale niestety nie potrafię sobie z tym poradzić
Jakub Fila

Jakub Fila Inżynieria / finanse
/ zarządzanie

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

To jeszcze tylko się upewnię - dla QGIS ważne jest, który z elementów opisanych tym samym Guid'em weźmie, czy też nie? Jeśli nie, to po prostu wystarczy w konstrukcji widoku:

SELECT DISTINCT ...

albo (ale to będzie nieprzenośne poza Postgres)

SELECT DISTINCT ON (gad.gid) ...
[ORDER BY gad.createdate]

co zapobiegnie zwracaniu duplikatów rekordów i powinno umożliwić mapowanie na QGIS. Ewentualne użycie [ORDER BY gad.createdate] pozwoli zachować kontrolę nad Distinctem i wybrać późniejszy wiersz, o ile przechowujesz createdate albo jakiś moddate. Możesz tylko określić jak wygląda maksymalny klucz?

Sekwencja:

http://www.postgresql.org/docs/8.1/static/sql-createse...

w Postgresie bardzo miło steruje się sekwencją - unika się pewnych problemów, które mi przeszkadzają np. w MS SQL.Jakub Fila edytował(a) ten post dnia 15.11.11 o godzinie 14:19
Przemysław S.

Przemysław S. Geoinformacja,
INSPIRE, liczenie
bobrów, zawracanie
rzeki...

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

witaj

z Distinctem problem w tym ze te wiersze z tym samym GIUD nie dą sobei równoważne gdyż poza GUID sa inne kolumny z innymi wartościami

w Q gis istotne bylo by aby wyświetlił oba wiersze z tym samym GIUD (po prostu zdubluje punkt geometrii) ale dzieki temu bedzie wiadomo ze opisywany punkt geometrii (czyt. stanowisko gatunku) bylo kontrolowane przynajmniej dwukrotnie wiec mozna porównac wyniki obserwacji. W oprogramowaniu GIS jest to po prostu FULL JOIN dwóch tabel i w takich przypadkach punkty sie po prostu zwielokrotnieją. Mogę Joinowac coprawda z poziomu Qgisa ale jest to upierdliwe i troche niewygodne - lepiej skorzystać z gotowego widoku, szczególnie jak sie korzysta z baz danych.

chyba pozostaje sekwencja choć ni w ząb nie wiem jak jej użyć w widokach - wtedy jak rozumiem byla by stworzona w widoku dodatkowa kolumna - np GID2 która by miala juz unikalne wartosci dzieki czemu Qgis po przeskanowaniu GID w przypadku gdyby znalazł zwielokrotnione wiersze użyłby GID2 jaki prim key? to by chyba rozwiązało sprawę

pzdr
Jakub Fila

Jakub Fila Inżynieria / finanse
/ zarządzanie

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

Zdefiniować sekwencję i wstawić pole z wartością z sekwencji do tabeli, której używasz do stworzenia widoku. Nie wiem, czy można tworzyć sekwencje GUID'ów, można sekwencję int'ów.
Przemysław S.

Przemysław S. Geoinformacja,
INSPIRE, liczenie
bobrów, zawracanie
rzeki...

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

to na to samo wyjdzie, sekwencja musiala by być juz w samym widoku. w sumie sekwencja (gid) juz jest w tabeli z której robię widok - przy joinowaniu bedzie to samo - pojawią sie dwa rekordy o tym samym polu w którym zastosowano sekwencję (gid)
Przemysław S.

Przemysław S. Geoinformacja,
INSPIRE, liczenie
bobrów, zawracanie
rzeki...

Temat: pytanie o widoki w postgresql (POSTGIS) i unikalny klucz

udało się - kolega podesłał mi rozwiązanie problemu troche zmodyfikowałem i działa ;)

CREATE OR REPLACE VIEW gatunki.plaz_pft_obse AS
SELECT int4(row_number() OVER (ORDER BY plaz.gid)) AS gid,......

Następna dyskusja:

Postgresql - widok i wydajn...




Wyślij zaproszenie do