Windows Server 2012 sunucusu çalıştırıyorum.
PostgreSQL 9.3.5, 64 bit
POSTGIS 2.1.3
QGIS Sunucusu 2.6.1-2
QGIS Masaüstü 2.8.3 ve 2.12
Postgresql veritabanında depolanan bazı katmanları düzenlemek için QGIS Desktop 2.12 kullanarak bir Microsoft Surface Pro 4 tablet kullanıyorum. Tabletteki katmanlar, QGIS Sunucusu tarafından sunulan WFS katmanlarıdır.
Katmanda bazı verileri ekledikten sonra sunucuya gönderilecek ve gönderilecek verileri zorlamak için düzenleme yaptığımda bazen güncelleme veritabanında yapılmıyor.
POST http isteğinin sunucuya geldiğini görebiliyorum, ama bazen veritabanında bir taahhüt (güncelleme) göremiyorum ve diğer bazı zamanlarda tamam çalışıyor ve taahhüt yapıyor.
QGIS Server günlüklerinde görebiliyorum (QGIS Desktop'ta 3 özelliğin verilerini güncelledim):
//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&SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=getxo_alumbrado_arquetas_registros_cajas&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
Tamam, PostgreSQL günlüklerine baktığımda güncellemenin hiçbir şeyi güncelleyen WHERE NULL yan tümcesi olduğunu görebiliyorum.
//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
POG verilerinde QGIS Server'ın dahili "fid" numarası kullanılarak hangi özelliğin güncellenmesi gerektiğini bildiğini görebiliyorum. Katmanım ise birincil anahtar olarak "id" alanına sahip. Bir yerde QGIS iç fidinden katmanımın kimliğine eşleme yaptığında kayboluyor ve nereye id = 1510 eklemek yerine sorguyu WHERE null ekliyor.
Komik olan şey 40 gündür çalışıyorlar ve hey bu sorunu sadece bir kez aldılar, ama geçen haftadan beri her gün bu problemi yaşıyorlar ... O zamandan beri bazen çalışıyor ve bazen değil. Ben istemciden POST http isteği yeniden gönderen Fiddles proxy ve aynı HTTP yazı bazen çalışıyor ve diğer zamanlarda çalışmıyor.
QGIS Desktop 2.8, 2.10 ve 2.12'de test ettim ve hepsinde oluyor (QGIS Server 2.6.1 olduğunu düşünüyorum). Aynı sonucu veren farklı katmanlarla da test ettim.
Bir hata veya sunucuda düzgün yapmıyorum katmanına yapılandırma bir tür olup olmadığını bilmiyorum ...
GÜNCELLEME 03/03/2016
QGIS Server ve QGIS Desktop'a her ikisini de 2.12.3'e güncelledim ve sorun devam ediyor.
Birkaç günlük testlerden sonra nihayet sorun oluştuğunda buldum. Katmanın düzenlemelerini QGIS'ye (WFS-T aracılığıyla) kaydettiğimde ve aynı zamanda başka bir kullanıcı tarafından bir Lizmap Haritası yüklendiğinde olur. Lizmap ayrıca qgis-sunucusu kullanır.
Bir haritayı yüklerken, Lizmap sunucuyu meşgul ediyor ve bir WFS-T güncelleme isteği alındığında, QGIS Server UPDATE SQL sorgusunu doğru bir şekilde oluşturamıyor.
WFS-T gönderisi alındığı sırada bir Lizmap yüklemesi varsa, qgis sunucusunda oluşturulan PostgreSQL sorgusu:
2016-03-03 11:47:30 CET LOG: 00000: sentencia: UPDATE "public"."getxo_alumbrado_tendido_canalizacion" SET "diametro"='22' WHERE NULL
Diğer taraftan, qgis-server WFS-T geldiğinde bir yükleme Lizmap'a veri sunmuyorsa, oluşturulan PostgreSQL sorgusu:
2016-03-03 11:46:21 CET LOG: 00000: sentencia: UPDATE "public"."getxo_alumbrado_tendido_canalizacion" SET "diametro"='111' WHERE "id"::text='1'
Where yan tümcesindeki farklılığa dikkat edin. İlki hiçbir şey yapmaz. İkincisi tamam çalışıyor.
Bu sorunu gidermek için Apache'yi veya qgis sunucusu için herhangi bir yapılandırma dosyasını ayarlayıp ayarlayamayacağımı bilmiyorum.
Ben hiçbir chnage ile sunucuya (4 çekirdek ve 16 GB RAM) çok daha fazla donanım vermeye çalıştım.
Tüm yazılım güncellemelerini OSGEO4W kullanarak yapıyorum. Bir yerde Apache ve PHP paketlerinin yıllardır güncellenmediğini okudum. Bunları manuel olarak güncellemeye çalışacağım ve sorunun nedeni apache veya php sürümünün olmadığını kontrol edeceğim.
GÜNCELLEME 16/03/2016
Apache ve PHP paketlerini güncelledim ve sorun devam ediyor. Birkaç testten sonra, bir Lizmap Haritası yüklerken sürüm değişikliklerini (WFS aracılığıyla) kaydedersem, kaydetmenin başarısız olduğunu, ancak Lizmap yüklemesi olmamasına rağmen (daha düşük bir hacimde) bazı zamanların başarısız olmaya devam ettiğini gördüm. QGIS Sunucusunda (qgis_mapserv.fcgi.exe) bir sorundur.