Перейменувати таблицю postGIS та оновити GeoServer?


9

Я хочу перейменувати одну з моїх таблиць postGIS. Однак коли я це роблю, застосовуючи просте

ALTER TABLE old_name RENAME TO new_name;

Просторові дані, наскільки я розумію, не оновлюються новою назвою. По-перше, чи можна виправити ці посилання за допомогою функції:

SELECT probe_geometry_columns()

Чи таблиця після цього гаразд? Або також слід вживати інших заходів? По-друге, як я оновлюю GeoServer, щоб він знайшов цю нову таблицю? На сьогоднішній день, якщо я запускаю вищезазначені команди та редагую інформацію про шари на GeoServer, щоб вказати на нову назву ... я все одно отримую помилку (GeoServer все ще намагається знайти її під старим іменем). Де саме слід змінити назву шару на GeoServer?

Відповіді:


4

Щоб перейменувати таблицю, вам доведеться змінити ім’я в метаданих двох місць. Спочатку на PostGIS, потім на конфігурацію Geoserver.

Щоб змінити PostGIS, ви можете безпосередньо оновити стовпчики geometry_column. Хоча probe_geometries матиме ефект вставки цього запису в стовпчики геометрії, це також матиме ефект ОПИСАННЯ схеми всіх таблиць, що вставляє будь-які записи про стовпці геометрії. Якщо у вас багато таблиць, це може дорожче, то чому б просто не оновлювати таблицю геометричних стовпців безпосередньо?

Для оновлення геосервера у вас є різні варіанти. Звичайно, ви можете зробити це вручну через GUI, але я відчуваю, що ви хочете його автоматизувати. Написання скрипту оболонки, який редагує конфігураційні файли в папці установки геосервера та перезапуск геосервера, але це також довгий шлях виконання дій. Я рекомендую вам скористатись API API Geoserver REST, який дозволяє вам маніпулювати конфігураціями шару за допомогою RESTful викликів .

Оновлення:

У випадку, якщо "оновити стовпці геометрії" не очевидно, виконайте наступне:

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

Оновлення на 8 років (!!!) пізніше (2018):

Як і деякі згадані нижче люди, після PostGIS 2.0 таблиці метаданих автоматично оновлюються після оператора ALTER.


Вибачте моє невігластво, але я дуже новачок у PostGIS. Як саме я оновлюю геометричні стовпці? Чи правильно я зрозумів, що запуск функції probe_ (без будь-яких параметрів) робить те саме?
Мімо

1
Подивіться на реалізацію з probe_geometry_column trac.osgeo.org/postgis/changeset/7548 Він переглядає кожну окрему таблицю в db, виявляючи, чи є в схемі рядок "геометричний тип " та вставляє новий запис, якщо потрібний запис не існує. в геометрії_колонках. Тим не менш, сиротні записи залишаються такими, якими вони є. Так чому б просто не зробити: ОНОВЛЕННЯ geometry_column SET f_table_name = 'new_table_name', де f_table_name = 'old_table_name'
Ragi Yaser Burhum

це показуєNot Found The requested URL /latest/en/user/restconfig/rest-config-api.html was not found on this server.
Scaramouche

Ви хочете подивитися на це зараз: docs.geoserver.org/stable/en/user/rest/api/index.html
Ragi Yaser Burhum

7

Зауважте, що в PostGIS 2.0+ все, що вам потрібно зробити, - це нормально

ALTER TABLE old_name RENAME TO new_name;

Запис у вікні геометрії стовпців (або географічних стовпців) також буде оновлено.


3
SELECT Probe_Geometry_Columns();

- зручна утиліта.

По-перше, коли ми додаємо стовпчик геометрії до наявної таблиці з

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

ми подаємо функції всім необхідним, щоб прив’язати стовпчик геометрії типу (гео_колон) до вказаної таблиці (my_table) і записати важливі деталі, такі як SRID (1234), тип геометрії (MULTIPOINT) та кількість розмірів (2) до таблиця геометричних стовпців. По суті це ALTER і три ОНОВЛЕННЯ.

Створення стовпців геометрії іншими способами (завантаженими із формфайлів, вибраних у СТВОРЕННІЙ ТАБЛИЦІ ТАКОЖ) можуть призвести до просторових таблиць, невидимих ​​для зовнішніх додатків, хоча вони добре працюють у базі даних. Без правильних деталей, збережених у geometry_column, фактичні значення геометрії відображаються як безглузді рядки символів для додатків, які шукають прогнозовані точки, лінії чи багатокутники.

Виклик функції зонда перевіряє кожен стовпець геометрії типу, додаючи нові значення до стовпців geometry_column і повідомляючи про конфлікти.

Повертаючись до свого запитання, GeoServer не вірить, що перейменована таблиця містить просторові дані, якщо зміна імені не відображається в геометричних колонках. Ще щось слід враховувати, що функція зонда створює дублікат запису, що відображає нову назву таблиці, але не позбавляється від оригінальної записи - ще однієї можливої ​​зупинки для GeoServer.

Все, що було сказано, я б вам запропонував: 1) запустити зонд, потім негайно видалити старий запис; або 2) слід змінити своє ім'я за допомогою ALTER на геометричних стовпцях, щоб змінити значення f_table_name.

Вибачте за сформованість, але сподіваюся, що це допоможе.


Дякую за вашу відповідь Я починаю краще зараз розуміти постГІС. Все-таки я трохи не впевнений у необхідних кроках, які потрібно зробити. Потрібно, перш за все, змінити ім'я, а потім щуп ()? Як я можу змінити геометричні стовпці?
Мімо

Найпростіший спосіб змінити геометричні стовпці - це відкрити pgAdmin, клацнути правою кнопкою миші таблицю, вибрати дані перегляду, вибрати перегляд усіх рядків, натиснути на клітинку, що містить стару назву таблиці, та ввести нове ім’я таблиці. або, ОНОВЛЕННЯ геометрії стовпців SET f_table_name = 'new_table_name' WHERE f_schema_name = 'schema_name' AND f_table_name = 'old_table_name'
rec.thegeom

1

Я не впевнений, що робить SELECT probe_geometry_col column (), але ви можете легко перевірити таблицю geometry_column, щоб побачити, чи є ваша нова таблиця, чи вона все ще вказує на стару.

Я підозрюю, що вам потрібно перезавантажити магазин GeoServer, щоб переконатися, що він «помічає» зміни. Або ж зупинка і старт це зроблять.


Що ви маєте на увазі під "перезавантажити магазин GeoServer"?
Мімо

На сторінці статусу ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) є кнопка перезавантаження.
Ян Тертон

Дякую. Однак перезавантаження не спрацювало. Я все ще отримую помилку GeoServer, яка скаржиться на те, що не знайшла перейменований шар. Він все ще намагається знайти його під старою назвою.
Мімо

ви змінили визначення шару, щоб вказати на нову назву таблиці?
Ян Тертон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.