Переименовать таблицу 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_columns. Хотя probe_geometries будет иметь эффект вставки этой записи в столбцы геометрии, он также будет иметь эффект ОПИСАНИЯ схемы всех таблиц вставкой любых пропущенных записей столбцов геометрии. Если у вас много таблиц, это может дорого обойтись, так почему бы просто не обновить таблицу geometry_columns напрямую?

Для обновления геосервера у вас есть различные варианты. Конечно, вы можете сделать это вручную через графический интерфейс, но у меня есть чувство, что вы хотите автоматизировать это. Написание сценария оболочки, который редактирует файлы конфигурации в папке установки геосервера и перезапускает геосервер, но это также долгий путь. Я бы порекомендовал вам использовать API конфигурации 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. Как именно я обновляю geometry_columns? Правильно ли я вас понял, что запуск функции probe_ (без каких-либо параметров) делает то же самое?
— Мимо

1
Посмотрите на реализацию из probe_geometry_columns trac.osgeo.org/postgis/changeset/7548. Он просматривает каждую таблицу в БД, находит, содержит ли схема строку «geometrytype», и вставляет новую запись, если требуемая запись не существует. в geometry_columns. Тем не менее, бесхозные записи остались такими, какие они есть. Так почему бы просто не сделать: ОБНОВИТЬ geometry_columns 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
— Раги Язер Бурхум

7

Обратите внимание, что в PostGIS 2.0+ все, что вам нужно сделать, это нормально

ALTER TABLE old_name RENAME TO new_name;

Запись в представлении geometry_columns (или geography_columns) также будет обновлена.


3
SELECT Probe_Geometry_Columns();

это удобная утилита

Во-первых, когда мы добавляем столбец геометрии к существующей таблице с

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

мы передаем функции все, что ей нужно, чтобы привязать столбец типа geometry (geo_column) к указанной таблице (my_table) и записать важные детали, такие как SRID (1234), тип геометрии (MULTIPOINT) и количество измерений (2), в таблица geometry_columns. По сути, это ALTER и три ОБНОВЛЕНИЯ.

Создание геометрических столбцов другими средствами (загруженными из шейп-файла, выбранными в CREATE TABLE AS и т. Д.) Может привести к появлению пространственных таблиц, которые не будут видны внешним приложениям, хотя они отлично работают в базе данных. Без правильных деталей, сохраненных в geometry_columns, фактические значения геометрии отображаются как бессмысленные символьные строки для приложений, которые ищут проецируемые точки, линии или многоугольники.

Вызов функции-зонда проверяет каждый столбец типа geometry, добавляет новые значения в geometry_columns и сообщает о конфликтах.

Возвращаясь к вашему вопросу, GeoServer не верит, что переименованная таблица содержит пространственные данные, если изменение имени не отражено в geometry_columns. Еще нужно учесть, что функция зонда создает дублирующую запись, отражающую имя новой таблицы, но не избавляется от исходной записи - еще одно потенциальное зависание для GeoServer.

Все сказанное я бы посоветовал вам: 1) запустить зонд и сразу же удалить старую запись; или 2) проследите за изменением вашего имени с помощью ALTER для geometry_columns, чтобы изменить значение f_table_name.

Извините за многословность, но я надеюсь, что это поможет.


Спасибо за ваш ответ. Я начинаю лучше понимать postGIS. Тем не менее, я немного не уверен в необходимых шагах, которые необходимо предпринять. Должен ли я сначала выполнить изменение имени, затем щуп ()? Как я могу изменить geometry_columns?
— Мимо

Самый простой способ внести изменения в geometry_columns - это открыть pgAdmin, щелкнуть правой кнопкой мыши таблицу, выбрать просмотр данных, выбрать просмотр всех строк, щелкнуть ячейку со старым именем таблицы и ввести новое имя таблицы. или, ОБНОВИТЬ геометрия_колонки SET f_table_name = 'new_table_name' ГДЕ f_schema_name = 'schema_name' И f_table_name = 'old_table_name'
— rec.thegeom

1

Я не уверен, что делает SELECT probe_geometry_columns (), но вы можете легко проверить таблицу geometry_columns, чтобы увидеть, есть ли там имя вашей новой таблицы или оно все еще указывает на старое.

Я подозреваю, что вам необходимо перезагрузить хранилище GeoServer, чтобы убедиться, что оно «замечает» изменения. Или остановка и запуск сделают это.


Что вы подразумеваете под «перезагрузить магазин GeoServer»?
— Мимо

На странице состояния ( docs.geoserver.org/latest/en/user/webadmin/server/status.html ) есть кнопка перезагрузки.
— Ян Тертон

Спасибо. Однако перезагрузка не сработала. Я все еще получаю ошибку GeoServer, которая жалуется на отсутствие переименованного слоя. Он все еще пытается найти его под старым именем.
— Мимо

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