QGIS सर्वर UPDATE भेज रहा है ... डब्ल्यूएफएस परत में पोस्टगिस के लिए कहां है


9

मैं एक Windows Server 2012 सर्वर चला रहा हूं।

PostgreSQL 9.3.5, 64-बिट

POSTGIS 2.1.3

QGIS सर्वर 2.6.1-2

QGIS डेस्कटॉप 2.8.3 और 2.12

मैं PostGesql डेटाबेस में संग्रहीत कुछ परतों को संपादित करने के लिए QGIS डेस्कटॉप 2.12 का उपयोग करके Microsoft सरफेस प्रो 4 टैबलेट का उपयोग कर रहा हूं। टैबलेट में लेयर्स WFS लेयर्स हैं जो QGIS सर्वर द्वारा दी गई हैं।

जब मैं डेटा को भेजने और सर्वर में संग्रहीत करने के लिए परत में कुछ डेटा डालने के बाद संपादन को टॉगल करता हूं तो कभी-कभी डेटाबेस में अपडेट नहीं किया जाता है।

मैं देख सकता हूं कि POST http अनुरोध सर्वर ओके पर आता है, लेकिन कभी-कभी मैं डेटाबेस में एक कमिट (अपडेट) नहीं देख सकता और कुछ अन्य बार यह ठीक काम करता है और कमिट करता है।

QGIS सर्वर के लॉग में मैं देख सकता हूं (मैंने QGIS डेस्कटॉप में 3 सुविधाओं का डेटा अपडेट किया है):

//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 लॉग में देखता हूं तो मैं देख सकता हूं कि अपडेट में WHULL 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" नंबर का उपयोग करके किस सुविधा को अपडेट करने की आवश्यकता है। दूसरी ओर, मेरी परत में प्राथमिक आईडी के रूप में "आईडी" फ़ील्ड है। जब कहीं यह QGIS आंतरिक मानचित्रण से मेरी परत की आईडी पर मैपिंग करता है तो यह खो रहा है और जहाँ आईडी = 1510 को जोड़ने के बजाय क्वेरी को शून्य में जोड़ता है।

मजेदार बात यह है कि वे 40 दिनों से काम कर रहे हैं और हे को केवल एक बार यह समस्या हुई थी, लेकिन पिछले सप्ताह से उन्हें हर दिन यह समस्या होती है ... तब से कभी-कभी काम होता है और कभी-कभी नहीं। मैं क्लाइंट ysing Fiddles प्रॉक्सी से POST http अनुरोध को पुनः भेजें और एक ही HTTP पोस्ट कभी-कभी काम करता है और अन्य बार नहीं।

मैंने इसे QGIS डेस्कटॉप 2.8, 2.10 और 2.12 में परीक्षण किया और उन सभी में होता है (QGIS सर्वर 2.6.1 मुझे लगता है)। मैंने एक ही परिणाम के साथ विभिन्न परतों के साथ इसका परीक्षण भी किया।

मुझे नहीं पता कि क्या कोई बग है या उस लेयर में किसी तरह का कॉन्फिग है जो मैं सर्वर में ठीक से नहीं कर रहा हूं ...


UPDATE 03/03/2016

मैंने QGIS सर्वर और QGIS डेस्कटॉप को २.१२.३ को अद्यतन किया और दोनों जारी है।

कई दिनों के परीक्षण के बाद मैं अंत में पाया कि जब समस्या होती है। जब मैं क्यूजीआईएस (डब्ल्यूएफएस-टी के माध्यम से) में परत के संपादन को सहेजता हूं तो ऐसा होता है और उसी समय एक अन्य उपयोगकर्ता द्वारा एक लिज़मैप मानचित्र लोड किया जा रहा है। Lizmap भी qgis-server का उपयोग करता है।

ऐसा लगता है कि नक्शा लोड करते समय, Lizmap सर्वर को व्यस्त बनाता है और जब WFS-T अपडेट अनुरोध पुनः प्राप्त होता है, QGIS सर्वर सही ढंग से UPDATE SQL क्वेरी बनाने में सक्षम नहीं होता है।

यदि WFS-T पोस्ट प्राप्त होने के समय कोई Lizmap लोड हो रहा है, तो qgis-server में उत्पन्न PostgreSQL क्वेरी है:

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

दूसरी ओर, यदि WFS-T आने पर qgis-server एक लोडिंग लिज़मैप में डेटा नहीं दे रहा है, तो पोस्टग्रेएसक्यूएल क्वेरी उत्पन्न होती है:

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

जहाँ क्लॉज में भिन्नता पर ध्यान दें। पहला यह कुछ नहीं करता है। दूसरा ठीक काम करता है।

मुझे नहीं पता कि क्या मैं इस समस्या को ठीक करने के लिए Apg या qgis- सर्वर के लिए किसी भी कॉन्फिग फाइल को ट्यून कर सकता हूं।

मैंने सर्वर को बहुत अधिक हार्डवेयर देने की कोशिश की (4 कोर और 16 जीबी रैम), जिसमें कोई chnage नहीं है।


मैं OSGEO4W का उपयोग करके सभी सॉफ्टवेयर अपडेट कर रहा हूं। इया ने कहीं पढ़ा कि अपाचे और पीएचपी पैकेज सालों से अपडेट नहीं हुए हैं। मैं उन्हें मैन्युअल रूप से अपडेट करने की कोशिश करूँगा और जाँच करूँगा कि एपाचे या php संस्करण समस्या का कारण नहीं है।


UPDATE 16/03/2016

मैंने अपाचे और पीएचपी पैकेज को अपडेट किया और समस्या जारी है। कई परीक्षणों के बाद मैंने पाया कि अगर मैं Lizmap मैप लोड करते समय संस्करण परिवर्तन (WFS के माध्यम से) बचाता हूं, तो बचत विफल हो जाती है, लेकिन कुछ अन्य समय विफल रहता है, हालांकि कोई Lizmap लोडिंग (कम वॉल्यूम पर) नहीं है। यह QGIS सर्वर (qgis_mapserv.fcgi.exe) में एक समस्या है।


जब आप काम करता है तो क्या आप QGIS सर्वर लॉग दिखा सकते हैं? मैं मान रहा हूं कि वे समान दिखते हैं, लेकिन हमें उस धारणा की पुष्टि करने की आवश्यकता है।
एलेक्सजिस

@alexGIS हाँ वे वही हैं। मैंने समस्या के समाधान के साथ उत्तर लिखा है। आपकी सहायताके लिए धन्यवाद!
एगिडी

जवाबों:


7

अंत में, QGIS के डेवलपर्स में से एक मथायस कुहन ने मुझे चाबी दी।

कहां खंड जाँच बनाया गया है प्राथमिक कुंजी के प्रकार तालिका के। यह एक पूर्णांक होना चाहिए और मेरी कुछ तालिकाओं में मैंने देखा कि प्रकार न्यूमेरिक (8,0) था।

उन तालिकाओं और प्राथमिक कुंजियों को कुछ समय पहले एक तृतीय-पक्ष ऐप द्वारा बनाया गया था।

मैंने टाइप करने के लिए पूर्णांक और मेरे द्वारा किए गए सभी परीक्षणों को बदल दिया है जब से मैंने काम किया है (मैंने डब्ल्यूएफएस के माध्यम से 100 से अधिक संस्करण परीक्षण किए हैं, मेरी राय में यह निष्कर्ष निकालने के लिए पर्याप्त है कि समस्या हल हो गई है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.