QGIS Sunucusu GÜNCELLEME gönderiyor… WFS katmanında postgis nereye NULL


9

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&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

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.


Çalışırken QGIS sunucu günlüklerini gösterebilir misiniz? Aynı göründüklerini varsayıyorum, ama bu varsayımı doğrulamamız gerekiyor.
alexGIS

@alexGIS Evet, hepsi aynı. Sorunun çözümü ile bir cevap yazdım. Yardımın için teşekkürler!
Egidi

Yanıtlar:


7

Sonunda QGIS geliştiricilerinden Matthias Kuhn bana anahtarı verdi.

WHERE deyiminin kontrol inşa edilmiştir birincil anahtar türünü tablosunun. Bu bir tamsayı olmalıdır ve benim bazı tabloların içinde ben tip Sayısal (8,0) olduğunu gördü.

Bu tablolar ve birincil anahtarlar bir süre önce bir üçüncü taraf uygulaması tarafından oluşturuldu.

Türü Tamsayı olarak değiştirdim ve o zamandan beri yaptığım tüm testler (sorunun çözüldüğüne karar verecek kadar, WFS aracılığıyla 100'den fazla baskı testi yaptım)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.