QGIS-сервер, що надсилає ОНОВЛЕННЯ…


9

Я запускаю сервер Windows Server 2012.

PostgreSQL 9.3.5, 64-розрядна

ПОСТГІС 2.1.3

Сервер QGIS 2.6.1-2

QGIS Desktop 2.8.3 та 2.12

Я використовую планшет Microsoft Surface Pro 4 за допомогою QGIS Desktop 2.12 для редагування деяких шарів, що зберігаються в базі даних Postgresql. Шари в планшеті - це шари WFS, які обслуговуються сервером QGIS.

Коли я занадто редагую редагування після вставки деяких даних у шар, щоб змусити дані надсилатись і зберігатись на сервері, іноді оновлення не проводиться в Базі даних.

Я бачу, що POST http-запит надходить на сервер нормально, але іноді я не бачу фіксації (оновлення) в базі даних, а в інший час він працює нормально і виконує фіксацію.

У журналах сервера QGIS я бачу (я оновив дані 3 функцій на робочому столі QGIS):

//QGIS SERVER RECEIVED HTTP POST FROM QGIS DESKTOP

[4852][11:11:19] ********************new request*************** [4852][11:11:19] remote ip: 192.168.144.20 [4852][11:11:19] CONTENT_TYPE: text/xml [4852][11:11:19] HTTP_USER_AGENT: Mozilla/5.0 QGIS/2.8.2-Wien [4852][11:11:19] MAP:D:\OSGeo4W\apps\qgis\bin\alumbrado\alumbrado.qgs
[4852][11:11:19] REQUEST:Transaction
[4852][11:11:19] REQUEST_BODY:<Transaction xmlns="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0"
service="WFS" xsi:schemaLocation="http://www.qgis.org/gml
http://eudala2.getxo.net/qgis/qgis_mapserv.fcgi.exe?map=D:\OSGeo4W\apps\qgis\bin\alumbrado\alumbrado.qgs&amp;SERVICE=WFS&amp;VERSION=1.0.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=getxo_alumbrado_arquetas_registros_cajas&amp;SRSNAME=EPSG:23030"
xmlns:gml="http://www.opengis.net/gml"><Update
xmlns="http://www.opengis.net/wfs"
typeName="getxo_alumbrado_arquetas_registros_cajas"><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">id_modelo</Name><Value
xmlns="http://www.opengis.net/wfs">0</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">alumbrado</Name><Value
xmlns="http://www.opengis.net/wfs">t</Value></Property><Filter
xmlns="http://www.opengis.net/ogc"><FeatureId
xmlns="http://www.opengis.net/ogc"
fid="getxo_alumbrado_arquetas_registros_cajas.3"/></Filter></Update><Update
xmlns="http://www.opengis.net/wfs"
typeName="getxo_alumbrado_arquetas_registros_cajas"><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">id_modelo</Name><Value
xmlns="http://www.opengis.net/wfs">0</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">alumbrado</Name><Value
xmlns="http://www.opengis.net/wfs">t</Value></Property><Filter
xmlns="http://www.opengis.net/ogc"><FeatureId
xmlns="http://www.opengis.net/ogc"
fid="getxo_alumbrado_arquetas_registros_cajas.4"/></Filter></Update><Update
xmlns="http://www.opengis.net/wfs"
typeName="getxo_alumbrado_arquetas_registros_cajas"><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">tipo</Name><Value
xmlns="http://www.opengis.net/wfs">A</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">tipo_tapa</Name><Value
xmlns="http://www.opengis.net/wfs">B</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">estado</Name><Value
xmlns="http://www.opengis.net/wfs">D</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">p_tierra_tipo_electrodo_tierra</Name><Value
xmlns="http://www.opengis.net/wfs">O</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">p_tierra_tipo_union_electrodo_tierra</Name><Value
xmlns="http://www.opengis.net/wfs">N</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">p_tierra_estado_union_tierra</Name><Value
xmlns="http://www.opengis.net/wfs">D</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">tipo_intervencion</Name><Value
xmlns="http://www.opengis.net/wfs">OTR</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">m_codcalle</Name><Value
xmlns="http://www.opengis.net/wfs">20</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">id_modelo</Name><Value
xmlns="http://www.opengis.net/wfs">0</Value></Property><Property
xmlns="http://www.opengis.net/wfs"><Name
xmlns="http://www.opengis.net/wfs">alumbrado</Name><Value
xmlns="http://www.opengis.net/wfs">t</Value></Property><Filter
xmlns="http://www.opengis.net/ogc"><FeatureId
xmlns="http://www.opengis.net/ogc"
fid="getxo_alumbrado_arquetas_registros_cajas.5"/></Filter></Update></Transaction>
[4852][11:11:19] SERVICE:WFS
[4852][11:11:19] SRSNAME:EPSG:23030
[4852][11:11:19] VERSION:1.0.0
[4852][11:11:22] Request finished in 2977 ms

Добре, коли я заглядаю в журнали PostgreSQL, я бачу, що в оновлення є пункт WHERE NULL, який нічого не оновлює ..

//POSTGRESQL UPDATE QUERIES
2016-01-29 11:11:22 CET LOG:  00000: sentencia: UPDATE "public"."getxo_alumbrado_arquetas_registros_cajas" SET "id_modelo"=0,"alumbrado"='t' WHERE NULL
2016-01-29 11:11:22 CET UBICACIÓN:  exec_simple_query, src\backend\tcop\postgres.c:890
2016-01-29 11:11:22 CET LOG:  00000: sentencia: UPDATE "public"."getxo_alumbrado_arquetas_registros_cajas" SET "id_modelo"=0,"alumbrado"='t' WHERE NULL
2016-01-29 11:11:22 CET UBICACIÓN:  exec_simple_query, src\backend\tcop\postgres.c:890
2016-01-29 11:11:22 CET LOG:  00000: sentencia: UPDATE "public"."getxo_alumbrado_arquetas_registros_cajas" SET "tipo"='A',"tipo_tapa"='B',"estado"='D',"p_tierra_tipo_electrodo_tierra"='O',"p_tierra_tipo_union_electrodo_tierra"='N',"p_tierra_estado_union_tierra"='D',"tipo_intervencion"='OTR',"m_codcalle"='20',"id_modelo"=0,"alumbrado"='t'
WHERE NULL

Я можу побачити в даних POST, що сервер QGIS знає, яку функцію потрібно оновити, використовуючи внутрішній номер "fid". З іншого боку, у мого шару є поле "id" в якості основного ключа. Десь коли він робить відображення з внутрішнього FID QGIS до ідентифікатора мого шару, він втрачається і додає WHERE нульовий запит, а не додавати, де id = 1510.

Найсмішніше те, що вони працюють 40 днів, і ей ця проблема була лише один раз, але з минулого тижня вони мали цю проблему щодня ... З тих пір інколи працює, а іноді й ні. Я надсилаю POST http-запит від клієнта ysing проксі-сервера Fiddles і той же пост HTTP іноді працює, а в інший час не працює.

Я перевірив його на QGIS Desktop 2.8, 2.10 та 2.12 і трапляється у всіх (думаю, сервер QGIS 2.6.1). Я також тестував його з різними шарами з однаковим результатом.

Я не знаю, чи є помилка чи є якась конфігурація шару, який я не роблю належним чином на сервері ...


ОНОВЛЕННЯ 03.03.2016

Я оновив до сервера QGIS і QGIS Desktop до 2.12.3, і проблема триває.

Після багатьох днів тестів я нарешті виявив, коли виникає проблема. Це трапляється, коли я зберігаю правки шару в QGIS (через WFS-T) і в той же час інша користувач завантажує карту Lizmap . Lizmap також використовує qgis-сервер.

Схоже, що під час завантаження карти Lizmap робить сервер зайнятим, і коли приймається запит на оновлення WFS-T, сервер QGIS не здатний правильно скласти запит UPDATE SQL. Приклад:

Якщо під час отримання публікації WFS-T є завантаження Lizmap, запит PostgreSQL, сформований на qgis-сервері:

2016-03-03 11:47:30 CET LOG:  00000: sentencia: UPDATE "public"."getxo_alumbrado_tendido_canalizacion" SET "diametro"='22' WHERE NULL

З іншого боку, якщо qgis-сервер не подає дані до завантажувальної Lizmap, коли WFS-T надходить, генерується запит PostgreSQL:

2016-03-03 11:46:21 CET LOG:  00000: sentencia: UPDATE "public"."getxo_alumbrado_tendido_canalizacion" SET "diametro"='111' WHERE "id"::text='1' 

Зверніть увагу на різницю в пункті де. Перший він нічого не робить. Другий працює нормально.

Я не знаю, чи можу я настроїти Apache або будь-які конфігураційні файли для qgis-сервера, щоб виправити цю проблему.

Я намагався надати сервер набагато більше апаратного забезпечення (4 ядра та 16 ГБ оперативної пам’яті), без жодних зусиль.


Я роблю всі оновлення програмного забезпечення за допомогою OSGEO4W. Я десь читав, що пакети Apache та PHP не оновлювалися роками. Я спробую оновити їх вручну і перевірте, чи не є причиною проблеми версії apache або php.


ОНОВЛЕННЯ 16.03.2016

Я оновив пакети Apache та PHP, і проблема триває. Після декількох тестів я виявив, що якщо я зберігаю зміни видання (через WFS) під час завантаження карти Lizmap, збереження не вдається, але деякі інші моменти продовжують виходити з ладу, хоча немає завантаження Lizmap (на меншому обсязі). Це проблема в сервері QGIS (qgis_mapserv.fcgi.exe).


Чи можете ви показувати журнали сервера QGIS, коли він працює? Я припускаю, що вони виглядають однаково, але нам потрібно підтвердити це припущення.
alexGIS

@alexGIS Так, вони однакові. Я написав відповідь із вирішенням проблеми. Спасибі за вашу допомогу!
Егіді

Відповіді:


7

Нарешті, Маттіас Кун , один із розробників QGIS, дав мені ключ.

Інеко будуються перевірка типу первинного ключа таблиці. Це повинно бути цілим числом, і в деяких моїх таблицях я побачив, що тип був числовим (8,0).

Ці таблиці та первинні ключі були створені стороннім додатком деякий час тому.

Я змінив тип на Integer, і всі тести, які я зробив з того часу, спрацювали (я зробив понад 100 тестів випуску через WFS, на мій погляд, достатньо, щоб зробити висновок, що проблема вирішена)

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