Редактирование версионных данных в PostgreSQL с помощью SQL

Уровень сложности: Начальный Требования к данным: Используйте собственные данные

Редактировать версионные данные в базе геоданных в PostgreSQL можно двумя способами: изменяя именованную версию в версионном виде или редактируя версию DEFAULT в версионном виде. См. описание каждой модели редактирования в разделе Краткий обзор редактирования версионных данных с использованием SQL.

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

Редактирование версии по умолчанию (DEFAULT)

Можно использовать SQL для подключения к версии DEFAULT и редактировать версионный вид. Вам не нужно открывать сеанс редактирования. При начале редактирования вы автоматически подключаетесь к текущему состоянию версии DEFAULT.

Необходимо принимать изменения после каждой правки, чтобы избежать блокировки других пользователей, обращающихся к таблицам изменений таблицы или класса объекта.

На следующих этапах изменяется версионный вид (blic_vw). Правки в этом виде записываются в таблицу изменений версионной таблицы blic. Так как изменений всего несколько, они будут внесены в версию DEFAULT.

Шаги:
  1. Подключитесь к базе геоданных из клиента SQL. Убедитесь, что вы подключились как пользователь с правами доступа для редактирования набора данных и версионного вида.
  2. Выполните редактирование версионного вида с помощью SQL.

    В этом примере обновляется существующая строка для изменения имени владельца свойства.

    UPDATE blic_vw 
    SET propowner = 'C. O. Industry' 
    WHERE lic = 44977;
    
  3. Внесите изменения (операция COMMIT).
    COMMIT;
    
  4. Внесите следующую правку.

    Новая запись будет добавлена в таблицу в версионном виде. Таблица содержит столбец ST_Geometry (местоположение).

    INSERT INTO blic_vw (propowner, date_entered, location)
    VALUES (
      'Moe Esposito', 
      current_date, 
      sde.ST_Point('point (0.0125662 0.0046711)', 12));
    
    ПодсказкаПодсказка:

    В выражении INSERT значение идентификатора объекта не указывается. Версионный вид автоматически получает следующий доступный идентификатор объекта и вставляет его для строки.

  5. Внесите изменения (операция COMMIT).
    COMMIT;
    

Редактирование именованной версии

Вы получили ряд обновлений для класса объектов blic, поэтому вы решили выполнить правку в именованной версии.

Далее представлены функции, используемые для редактирования именованной версии базы геоданных, и их синтаксис:

Функция

Цель

Синтаксис и описание

sde.sde_create_version

Создать именованную версию базы геоданных.

Если вы редактируете именованные версии (отличные от DEFAULT), всегда изменяйте собственную версию. Несколько пользователей не могут редактировать одну именованную версию с помощью версионных видов.

SELECT sde.sde_create_version ('<parent_name>', '<child_version>', <rule_code>, <access_code>, '<description>')

sde.sde_set_current_version

Укажите, к какой версии базы геоданных и состоянию нужно получить доступ.

SELECT sde.sde_set_current_version('<child_version>');

sde.sde_edit_version

Откройте и завершите сеанс редактирования именованной версии.

SELECT sde.sde_edit_version('<child_version>',<1 или 2>)

Укажите 1 для запуска сеанса редактирования. Укажите значение 2, чтобы завершить его.

Параметры в выражениях select представляют следующее:

  • <parent_version> – эта та версия базы геоданных, на основе которой создана ваша версия.
  • <child_version> – это именованная версия, которую вы редактируете.
  • <name_rule> указывает, следует ли использовать заданное имя версии без изменений (2), или следует создать уникальное имя при указании дублирующегося имени (1).
  • <access> – это уровень разрешений версии: 0 для частного доступа, 1 для общего и 2 для защищенного.
  • <description> – текстовое описание дочерней версии.

На следующих этапах создается именованная версия (myedits12111) на основе версии DEFAULT, и в нее вносятся правки с помощью вида blic_vw.

Шаги:
  1. Из клиента SQL создайте новую версию, в которую вы будете вносить исправления.
    SELECT sde.sde_create_version
    ('sde.DEFAULT', 'myedits12111', 2, 1, 'version for edits');
    
  2. Текст, заключенный в одиночные кавычки, читается буквально. Поэтому текст в кавычках должен совпадать с текстом (как в нижнем или верхнем регистре, так и при смешанном регистре), как он хранится в базе данных.

  3. Укажите созданную дочернюю версию для сеанса редактирования.
    SELECT sde.sde_set_current_version('myedits12111');
    
  4. Начните сеанс редактирования, выполнив функцию sde_edit_version и указав значение 1.

    1 указывает на то, что нужно открыть сеанс редактирования.

    SELECT sde.sde_edit_version('myedits12111',1);
    
  5. Внесите правки в версионный вид с помощью SQL.
    INSERT INTO blic_vw (propowner, date_entered, location)
    VALUES (
      'V. Nay', 
      current_date, 
      sde.ST_Point('point (0.0125699 0.0046700)', 12));
    
    UPDATE blic_vw 
    SET phone1 = '555.111.2345', phone2 = '555.111.6789' 
    WHERE propowner = 'Tella Chomsky';
    
    UPDATE blic_vw
    SET exp_date = '2020-06-30 17:00:00'
    WHERE lid = 22903;
    
    UPDATE blic_vw
    SET location = sde.ST_Point('point (0.0125705 0.0046688)', 12))
    WHERE lid = 8992;
    
    INSERT INTO blic_vw 
    (codenum, propowner) 
    VALUES (456, 'Anjo Badsu');
    
    DELETE FROM blic_vw
    WHERE lid = 133;
    
  6. Примените изменения.
    COMMIT;
    
  7. Дополнительные изменения вносятся в SQL. После завершения следующей серии исправлений, закройте сеанс редактирования.
  8. Остановите сеанс редактирования, выполнив функцию sde_edit_version, но теперь введите значение 2.

    Значение 2 указывает на то, что нужно завершить сеанс редактирования.

    SELECT sde.sde_edit_version('myedits12111',2);
    
    ПодсказкаПодсказка:

    Вы можете изменить только одну версию в сеансе редактирования. Например, если требуется изменить вторую версию (например, mynewedits), необходимо закрыть сеанс редактирования в myedits12111, как показано на данном этапе. Затем можно вызвать sde_set_current_version, чтобы указать версию mynewedits, и начать сеанс редактирования в ней, вызвав sde_edit_version.

Переключение с редактирования именованной версии на редактирование версии DEFAULT

Если требуется вернуться к редактированию версии DEFAULT (например, если руководитель говорит вам, что другим пользователям на участке требуется быстро внести правку), можно вызвать процедуру set_default для перехода на редактирование версии DEFAULT. Правки, вносимые в версию DEFAULT, могут видеть другие пользователи, подключенные к DEFAULT, если они обновляют свои подключения.

Далее представлена функция, используемая для редактирования версии DEFAULT базы геоданных, и ее синтаксис:

Функция

Цель

Синтаксис и описание

sde.set_default

Возврат к редактированию текущего состояния версии DEFAULT.

Вызовите эту функцию, если вы редактировали именованную версию или определенное состояние версии DEFAULT, но хотите вернуться к редактированию текущей версии DEFAULT.

SELECT sde.set_default

Шаги:
  1. В командной строке SQL запустите функцию set_default.
    SELECT sde.set_default;
    

    Сеанс теперь настроен для редактирования текущего состояния, на которое ссылается версия DEFAULT.

  2. Измените версионный вид blic_vw.
    INSERT INTO blic_vw (propowner, b_name, date_entered, location)
    VALUES (
      'Ruben Gol', 
      current_date, 
      'Chez Coiffure',
      sde.ST_Point ('point (0.0125650 0.0046721)', 12));
    
  3. Внесите изменения (операция COMMIT).
    COMMIT;
    

    Другие клиенты, указывающие на то же состояние версии DEFAULT или любое последующее состояние, могут обновить свои подключения, чтобы просмотреть на новый точечный объект.

Согласование и закрепление изменений в именованной версии

После внесения правок в именованную версию необходимо использовать ArcGIS для согласования, анализа и разрешения конфликтов, а затем закрепить изменения. Это можно сделать в ArcGIS for Desktop с помощью инструмента геообработки Согласование версий (Reconcile Versions) или скрипта Python. Более подробную информацию см. в разделах:

ПодсказкаПодсказка:

Если редактируемые данные были зарегистрированы как версионные, без опции перемещения изменений в базу, то изменения будут перемещены в базовую таблицу после согласования и закрепления изменений в версии DEFAULT (по умолчанию).

Как только изменения будут закреплены в версии DEFAULT, именованную версию можно будет удалить. Далее представлена функция, используемая для удаления именованной версии после согласования и закрепления изменений в версии DEFAULT базы геоданных, и ее синтаксис:

Функция

Цель

Синтаксис и описание

sde.sde_delete_version

Удалить версию базы геоданных.

SELECT sde.sde_delete_version('<child_version>');

В следующем примере удаляется версия myedits12111 после согласования и закрепления всех изменений в версии DEFAULT:

SELECT sde.sde_delete_version('myedits12111');

Связанные темы

9/11/2013