Zmienić nazwę tabeli postGIS i zaktualizować GeoServer?

9

Chcę zmienić nazwę jednej z moich tabel postGIS. Jednak kiedy to robię, stosując prosty

ALTER TABLE old_name RENAME TO new_name;

Rozumiem, że dane przestrzenne nie są aktualizowane o nową nazwę. Po pierwsze, czy te odniesienia można naprawić, uruchamiając funkcję:

SELECT probe_geometry_columns()

Czy po tym sam stół jest w porządku? Czy też należy podjąć inne środki? Po drugie, jak zaktualizować GeoServer, aby znalazł tę nową tabelę? Na razie, jeśli uruchomię powyższe polecenia i edytuję informacje o warstwie na GeoServer, aby wskazać nową nazwę ... Nadal pojawia się błąd (GeoServer nadal próbuje znaleźć go pod starą nazwą). Gdzie dokładnie należy zmienić nazwę warstwy w GeoServer?

Mimo
źródło

Odpowiedzi:

4

Aby zmienić nazwę tabeli, musisz zmienić nazwę w metadanych dwóch miejsc. Najpierw w PostGIS, a następnie w konfiguracji Geoserver.

Aby zmienić PostGIS, możesz bezpośrednio zaktualizować geometry_columns. Chociaż probe_geometries będzie skutkować wstawieniem tego wpisu do kolumn geometrii, spowoduje to również OPISANIE schematu wszystkich tabel i wstawienie brakujących wpisów kolumn geometrii. Jeśli masz wiele tabel, może to być drogie, więc dlaczego nie zaktualizować bezpośrednio tabeli geometry_columns?

Do aktualizacji geoserver masz różne opcje. Z pewnością możesz to zrobić ręcznie za pomocą GUI, ale mam wrażenie, że chcesz to zautomatyzować. Pisanie skryptu powłoki, który edytuje pliki konfiguracyjne w folderze instalacyjnym geoserver i restartowanie geoserver, ale to także długa droga do zrobienia czegoś. Polecam użycie interfejsu API konfiguracji REST geoservera, który pozwala manipulować konfiguracjami warstw za pomocą wywołań RESTful .

Aktualizacja:

W przypadku, gdy „aktualizacja kolumn geometrii” nie jest oczywista, wykonaj następujące czynności:

UPDATE geometry_columns set f_table_name = 'my_new_table_name' where f_table_name = 'my_old_table_name';

Zaktualizuj 8 lat (!!!) później (2018):

Podobnie jak niektóre osoby wymienione poniżej, po PostGIS 2.0 tabele metadanych są aktualizowane automatycznie po instrukcji ALTER.

Ragi Yaser Burhum
źródło
Przepraszam za moją ignorancję, ale ponieważ jestem bardzo nowy w PostGIS. Jak dokładnie zaktualizować geometry_columns? Czy dobrze zrozumiałem, że uruchomienie funkcji probe_ (bez żadnych parametrów) robi to samo?
Mimo
1
Spójrz na implementację z probe_geometry_columns trac.osgeo.org/postgis/changeset/7548 Przechodzi przez każdą tabelę w db, sprawdzając , czy schemat ma ciąg „ typ geometrii” i wstawiając nowy rekord, jeśli wymagany wpis nie istnieje w geometry_columns. Niemniej jednak sieroce zapisy pozostały takie, jakie są. Dlaczego więc nie zrobić: AKTUALIZACJA kolumny_ geometrii ZESTAW nazwa_tabeli = „nazwa_tabeli” gdzie nazwa_tabeli = „nazwa_tabeli”
Ragi Yaser Burhum
to pokazujeNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche
chcesz na to teraz spojrzeć
Ragi Yaser Burhum
7

Pamiętaj, że w PostGIS 2.0+ wszystko, co musisz zrobić, to normalne

ALTER TABLE old_name RENAME TO new_name;

Wpis w widoku geometry_columns (lub geography_columns) również zostanie zaktualizowany.

Shane
źródło
3
SELECT Probe_Geometry_Columns();

jest przydatnym narzędziem.

Po pierwsze, kiedy dołączamy kolumnę geometrii do istniejącej tabeli za pomocą

SELECT AddGeometryColumn('my_table', 'geo_column', 1234, 'MULTIPOINT', 2);

podajemy funkcję wszystko, czego potrzebuje, aby przyczepić kolumnę geometrii typu (kolumna geo) do określonej tabeli (moja_tabela) i zapisać ważne szczegóły, takie jak SRID (1234), typ geometrii (MULTIPOINT) i liczbę wymiarów (2), aby tabela geometry_columns. Zasadniczo jest to ZMIANA i trzy AKTUALIZACJE.

Tworzenie kolumn geometrii innymi sposobami (ładowanymi z pliku kształtu, wybranego w CREATE TABLE AS itp.) Może prowadzić do tabel przestrzennych, które są niewidoczne dla aplikacji zewnętrznych, chociaż działają dobrze w bazie danych. Bez odpowiednich szczegółów przechowywanych w geometry_columns rzeczywiste wartości geometrii pojawiają się jako nonsensowne ciągi znaków dla aplikacji szukających rzutowanych punktów, linii lub wielokątów.

Wywołanie funkcji sondy sprawdza każdą kolumnę geometrii typu, dodając nowe wartości do geometry_columns i zgłaszając konflikty.

Powracając do pytania, GeoServer nie wierzy, że tabela o zmienionej nazwie zawiera dane przestrzenne, jeśli zmiana nazwy nie zostanie odzwierciedlona w kolumnach geometria. Inną kwestią do rozważenia jest to, że funkcja sondy tworzy duplikat rekordu odzwierciedlający nazwę nowej tabeli, ale nie pozbywa się oryginalnego rekordu - kolejne potencjalne zawieszenie się GeoServera.

Powiedziawszy to, proponuję Ci: 1) uruchomić sondę, a następnie natychmiast usunąć stary zapis; lub 2) kontynuuj zmianę nazwy za pomocą ALTER na geometry_columns, aby zmienić wartość f_table_name.

Przepraszam za gadatliwość, ale mam nadzieję, że to pomoże.

rec. thegeom
źródło
Dziękuję za odpowiedź. Zaczynam rozumieć lepiej postGIS. Mimo to nie jestem pewien, jakie kroki należy podjąć. Czy powinienem przede wszystkim dokonać zmiany nazwy, a następnie sondy ()? Jak mogę zmienić geometry_columns?
Mimo
Najprostszym sposobem na zmianę w geometry_columns jest otwarcie pgAdmin, kliknięcie tabeli prawym przyciskiem myszy, wybranie widoku danych, wybranie widoku wszystkich wierszy, kliknięcie komórki zawierającej starą nazwę tabeli i wpisanie nowej nazwy tabeli. lub, UPDATE geometry_columns SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' AND f_table_name = 'old_table_name'
rec.thegeom
1

Nie jestem pewien, co robi SELECT probe_geometry_columns (), ale możesz łatwo sprawdzić tabelę geometry_columns, aby sprawdzić, czy jest tam twoja nowa nazwa tabeli lub czy nadal wskazuje ona na starą.

Podejrzewam, że musisz przeładować sklep GeoServer, aby upewnić się, że „zauważa” zmiany. Alternatywnie zatrzyma się i uruchomi to.

Ian Turton
źródło
Co rozumiesz przez „przeładowanie sklepu GeoServer”?
Mimo
Na stronie statusu ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) znajduje się przycisk przeładowania.
Ian Turton
Dzięki. Jednak przeładowanie nie działało. Nadal pojawia się błąd GeoServer, który skarży się na nie znalezienie warstwy o zmienionej nazwie. Nadal próbuje znaleźć go pod starą nazwą.
Mimo
zmieniłeś definicję warstwy, aby wskazywała nową nazwę tabeli?
Ian Turton