From e2e062ed1241923241af1ffad1f98fb61f717afc Mon Sep 17 00:00:00 2001
From: Tom LAVEILLE
Date: Wed, 12 Feb 2025 17:28:52 +0100
Subject: [PATCH] outils de rename pour bd psql
---
CenRa_POSTGIS/CenRa_Postgis.py | 24 ++
CenRa_POSTGIS/metadata.txt | 4 +-
CenRa_POSTGIS/postgis_creator.py | 1 +
CenRa_POSTGIS/postgis_editor.py | 1 +
CenRa_POSTGIS/postgis_rename.py | 187 +++++++++++
CenRa_POSTGIS/tools/icons/page_rename.png | Bin 0 -> 4948 bytes
.../tools/ui/CenRa_PostgisRename_base.ui | 314 ++++++++++++++++++
plugins.xml | 6 +-
8 files changed, 532 insertions(+), 5 deletions(-)
create mode 100644 CenRa_POSTGIS/postgis_rename.py
create mode 100644 CenRa_POSTGIS/tools/icons/page_rename.png
create mode 100644 CenRa_POSTGIS/tools/ui/CenRa_PostgisRename_base.ui
diff --git a/CenRa_POSTGIS/CenRa_Postgis.py b/CenRa_POSTGIS/CenRa_Postgis.py
index d87cf1ab..7636fc5f 100644
--- a/CenRa_POSTGIS/CenRa_Postgis.py
+++ b/CenRa_POSTGIS/CenRa_Postgis.py
@@ -21,6 +21,7 @@ from .tools.resources import (
)
from .postgis_editor import Postgis_Editor
from .postgis_creator import Postgis_Creator
+from .postgis_rename import Postgis_Rename
from .about_form import AboutDialog
from PyQt5.QtCore import *
@@ -30,6 +31,7 @@ class PgPostgis:
""" Constructor. """
self.action_editor = None
self.action_creator = None
+ self.action_rename = None
# self.issues = None
self.provider = None
self.locator_filter = None
@@ -58,6 +60,7 @@ class PgPostgis:
icon = QIcon(resources_path('icons', 'page_new.png'))
icon2 = QIcon(resources_path('icons', 'page_ajout.png'))
+ icon3 = QIcon(resources_path('icons', 'page_rename.png'))
# Open the online help
self.help_action = QAction(icon, "CenRa_Postgis", iface.mainWindow())
@@ -75,6 +78,21 @@ class PgPostgis:
self.postgis_editor = QAction(icon2, 'dossier_editor',None)
self.toolBar.addAction(self.postgis_editor)
self.postgis_editor.triggered.connect(self.open_editor)
+ if not self.action_rename:
+ self.action_rename = Postgis_Rename()
+
+ self.postgis_rename = QAction(icon3, 'dossier_rename',None)
+ self.toolBar.addAction(self.postgis_rename)
+ self.postgis_rename.triggered.connect(self.open_rename)
+
+ if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement':
+ self.action_rename.setEnabled(True)
+ self.postgis_rename.setEnabled(True)
+ self.postgis_rename.setVisible(1)
+ else:
+ self.action_rename.setEnabled(False)
+ self.postgis_rename.setEnabled(False)
+ self.postgis_rename.setVisible(0)
def open_about_dialog(self):
"""
@@ -94,12 +112,18 @@ class PgPostgis:
self.action_creator.show()
self.action_creator.raise_()
+ def open_rename(self):
+ self.action_rename.show()
+ self.action_rename.raise_()
+
def unload(self):
""" Unload the plugin. """
if self.action_editor:
iface.removePluginMenu('CenRa_Postgis',self.postgis_editor)
if self.action_creator:
iface.removePluginMenu('CenRa_Postgis',self.postgis_creator)
+ if self.action_rename:
+ iface.removePluginMenu('CenRa_Postgis',self.postgis_rename)
if self.provider:
QgsApplication.processingRegistry().removeProvider(self.provider)
diff --git a/CenRa_POSTGIS/metadata.txt b/CenRa_POSTGIS/metadata.txt
index 48fffbf1..05aad1ce 100644
--- a/CenRa_POSTGIS/metadata.txt
+++ b/CenRa_POSTGIS/metadata.txt
@@ -12,7 +12,7 @@
name=CenRa_POSTGIS
qgisMinimumVersion=3.0
description=Permet de crée un dossier dans la base PostGis
-version=2.5
+version=2.6
author=Conservatoire d'Espaces Naturels de Rhône-Alpes
email=si_besoin@cen-rhonealpes.fr
@@ -21,7 +21,7 @@ email=si_besoin@cen-rhonealpes.fr
# Optional items:
# Uncomment the following line and add your changelog entries:
-changelog=CenRa_POSTGIS:
04/02/2025 - Version 2.5:
- Correctif bug création de couche.
23/01/2025 - Version 2.4:
- Correctif sur les pkey.22/01/2025 - Version 2.3:
- Correctif sur la creation de projet.21/01/2025 - Version 2.2:
- Correctif sur la longeur des nom.07/01/2025 - Version 2.1:
- ByPass du certif ssl ci erreur.22/10/2024 - Version 2.0:
- Refont du code.
+changelog=CenRa_POSTGIS:
12/02/2025 - Version 2.6:
- InDev:renomé les schema et table.04/02/2025 - Version 2.5:
- Correctif bug création de couche.23/01/2025 - Version 2.4:
- Correctif sur les pkey.22/01/2025 - Version 2.3:
- Correctif sur la creation de projet.21/01/2025 - Version 2.2:
- Correctif sur la longeur des nom.07/01/2025 - Version 2.1:
- ByPass du certif ssl ci erreur.22/10/2024 - Version 2.0:
- Refont du code.
# tags are comma separated with spaces allowed
tags=cenra, postgis, database
diff --git a/CenRa_POSTGIS/postgis_creator.py b/CenRa_POSTGIS/postgis_creator.py
index 90ce8d9a..a1928568 100644
--- a/CenRa_POSTGIS/postgis_creator.py
+++ b/CenRa_POSTGIS/postgis_creator.py
@@ -50,6 +50,7 @@ class Postgis_Creator(QDialog, EDITOR_CLASS):
# run method that performs all the real work
def raise_(self):
+ self.activateWindow()
# show the dialog
self.show()
# Run the dialog event loop
diff --git a/CenRa_POSTGIS/postgis_editor.py b/CenRa_POSTGIS/postgis_editor.py
index 9f238a19..0d591f31 100644
--- a/CenRa_POSTGIS/postgis_editor.py
+++ b/CenRa_POSTGIS/postgis_editor.py
@@ -50,6 +50,7 @@ class Postgis_Editor(QDialog, EDITOR_CLASS):
### Outil Ajout de nouvelles couche a un dossier
def raise_(self):
+ self.activateWindow()
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
diff --git a/CenRa_POSTGIS/postgis_rename.py b/CenRa_POSTGIS/postgis_rename.py
new file mode 100644
index 00000000..0c03164f
--- /dev/null
+++ b/CenRa_POSTGIS/postgis_rename.py
@@ -0,0 +1,187 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import absolute_import
+# Import the PyQt and QGIS libraries
+from builtins import next
+from builtins import str
+from builtins import object
+import qgis
+from qgis.PyQt.QtCore import QSettings
+from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox
+from qgis.PyQt.QtGui import QIcon
+from PyQt5.QtCore import *
+from PyQt5.QtGui import *
+from PyQt5 import QtGui
+from qgis.core import *
+from qgis.core import QgsDataSourceUri
+
+from .tools.PythonSQL import *
+from .tools.resources import (
+ load_ui,
+ resources_path,
+ login_base,
+ send_issues,
+ create_vierge,
+ create_contour,
+ create_travaux,
+ create_habita
+)
+from .issues import CenRa_Issues
+
+import os.path
+import webbrowser, os
+import psycopg2
+import psycopg2.extras
+import base64
+from qgis.utils import iface
+
+EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui')
+
+first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password)
+first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
+first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')")
+res_ident = first_cur.fetchone()
+mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
+user = res_ident[1]
+
+con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp)
+cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)
+first_conn.close()
+
+class Postgis_Rename(QDialog, EDITOR_CLASS):
+
+ def __init__(self, parent=None):
+ _ = parent
+ super().__init__()
+ self.setupUi(self)
+ self.settings = QgsSettings()
+ self.s = QSettings()
+ self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png')))
+ self.iface = iface
+
+ self.schema.currentIndexChanged.connect(self.Test)
+ self.buttonBox.accepted.connect(self.msgBox)
+ ### Outil Ajout de nouvelles couche a un dossier
+ def raise_(self):
+ self.activateWindow()
+ self.groupBox_2.hide()
+ GET_ALL_SCHEMA = """SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema LIKE '_form_%' OR table_schema LIKE '_01_%' OR table_schema LIKE '_07_%' OR table_schema LIKE '_26_%' OR table_schema LIKE '_42_%' OR table_schema LIKE '_69_%' ORDER BY table_schema;"""
+ cur.execute(GET_ALL_SCHEMA)
+ AllSchema = cur.fetchall()
+ last_value_schema = self.schema.currentText()
+ last_value_departement = self.departement.currentText()
+ self.schema.clear()
+ self.departement.clear()
+ self.schema.addItems([''])
+ for Schema in AllSchema:
+ self.schema.addItems(Schema)
+ self.departement.addItems(['','01','07','26','42','69','form'])
+ if last_value_schema != '':
+ self.schema.setCurrentIndex(self.schema.findText(last_value_schema))
+ if last_value_departement != '':
+ self.departement.setCurrentIndex(self.departement.findText(last_value_departement))
+
+ def Test(self):
+ if self.schema.currentText() != '':
+ self.loadValue()
+ else:
+ self.old_name.setText('')
+
+ def loadValue(self):
+ oldSchema = self.schema.currentText()
+ if oldSchema[:6] == '_form_':
+ oldSchema = self.schema.currentText()[6:]
+ prefixSchema = self.schema.currentText()[1:5]
+ else:
+ oldSchema = self.schema.currentText()[4:]
+ prefixSchema = self.schema.currentText()[1:3]
+ if oldSchema[:3] == 'at_':
+ oldSchema = oldSchema[3:]
+ self.animation.setChecked(1)
+ else:
+ self.animation.setChecked(0)
+ self.old_name.setText(oldSchema)
+ self.departement.setCurrentIndex(self.departement.findText(prefixSchema))
+
+ def updateName(self):
+ if self.departement.currentText() != '':
+ oldTableName = self.old_name.text()
+ newTableName = ((self.new_name.text()).lower()).replace(' ','_')
+ newPrefixSchema = '_'+self.departement.currentText()+'_'
+ if self.schema.currentText()[:6] == '_form_':
+ oldPrefixSchema = self.schema.currentText()[:6]
+ if (self.schema.currentText()[6:9]) == "at_":
+ oldPrefixSchema=oldPrefixSchema+'at_'
+ else:
+ oldPrefixSchema = self.schema.currentText()[:4]
+ if (self.schema.currentText()[4:7]) == 'at_':
+ oldPrefixSchema=oldPrefixSchema+'at_'
+
+ if self.animation.isChecked():
+ newPrefixSchema=newPrefixSchema+'at_'
+ oldSchemaName = oldPrefixSchema+oldTableName
+ newSchemaName = newPrefixSchema+newTableName
+
+ if oldSchemaName != newSchemaName:
+ global AllSQLrun
+ allSQLrun=''
+
+ SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '"""+newSchemaName+"""',f_table_name = replace(replace(f_table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') WHERE f_table_schema LIKE '"""+oldSchemaName+"""';"""
+ allSQLrun = allSQLrun+SQL_UPDATE
+ cur.execute(SQL_UPDATE)
+
+ SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') from information_schema.tables WHERE table_schema LIKE '"""+oldSchemaName+"""';"""
+ cur.execute(SQL_GET_TABLE_RENAME)
+ allTableRename = cur.fetchall()
+ allTableList = []
+ for TableRename in allTableRename:
+ oldTable = TableRename[0]
+ newTable = TableRename[1]
+ allTableList.append([oldTable,newSchemaName,newTable])
+ SQL_RENAME_TABLE = """ALTER TABLE """+oldSchemaName+'.'+oldTable+""" RENAME TO """+newTable+""";"""
+ allSQLrun = allSQLrun+SQL_RENAME_TABLE
+ cur.execute(SQL_RENAME_TABLE)
+
+ SQL_RENAME_SCHEMA = 'ALTER SCHEMA '+oldSchemaName+' RENAME TO '+newSchemaName
+ allSQLrun = allSQLrun+SQL_RENAME_SCHEMA
+ cur.execute(SQL_RENAME_SCHEMA)
+ #print(allSQLrun)
+ con.commit()
+ for LayerOpen in allTableList:
+ self.UnloadLoadLayers(LayerOpen[0],LayerOpen[1],LayerOpen[2])
+
+
+ def UnloadLoadLayers(self,OldName,NewSchema,NewTable):
+ allLayers = (QgsProject.instance().mapLayers().values())
+ listLayers = []
+ listLayersName = []
+ for layer in allLayers:
+ listLayers.append(layer)
+ listLayersName.append(layer.name())
+ if OldName in listLayersName:
+ layer = (listLayers[listLayersName.index(OldName)])
+ provider = layer.dataProvider()
+ dbname = (QgsDataSourceUri(provider.dataSourceUri()).database())
+ user = QgsDataSourceUri(provider.dataSourceUri()).username()
+ mdp = QgsDataSourceUri(provider.dataSourceUri()).password()
+ host = QgsDataSourceUri(provider.dataSourceUri()).host()
+ port = QgsDataSourceUri(provider.dataSourceUri()).port()
+
+ ### Affichage de la table
+ uri = QgsDataSourceUri()
+ # set host name, port, database name, username and password
+ uri.setConnection(host ,port ,dbname ,user ,mdp)
+ # set database schema, table name, geometry column and optionaly subset (WHERE clause)
+ uri.setDataSource(NewSchema, NewTable, 'geom')
+ QgsProject.instance().removeMapLayer(layer.id())
+ layer = self.iface.addVectorLayer(uri.uri(), NewTable, "postgres")
+
+ def msgBox(self):
+ self.QMBquestion = QMessageBox()
+ self.QMBquestion.setWindowTitle(u"Attention !")
+ self.QMBquestion.setIcon(QMessageBox.Warning)
+ self.QMBquestion.setText("Attention, le renommage de dossier PostGIS peut engendrer des pertes de liaisons avec des projets QGIS !")
+ self.QMBquestion.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
+ self.QMBquestion = self.QMBquestion.exec()
+ if self.QMBquestion == QMessageBox.Yes:
+ self.updateName()
diff --git a/CenRa_POSTGIS/tools/icons/page_rename.png b/CenRa_POSTGIS/tools/icons/page_rename.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9c0019917e1b8e14cc0ac6eb4c32764feb0d1b0
GIT binary patch
literal 4948
zcmV-a6RYfrP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000Uv
zX+uL$Nkc;*P;zf(X>4Tx07%E3mUmQC*A|D*y?1({%`gH|hTglt0MdJtUPWP;8DJ;_
z4l^{dA)*2iMMRn+NKnLp(NH8-M6nPQRImpm2q-ZaMN}+rM%Ih2ti1Q~^84egZ|$@9
zx%=$B&srA%lBX}1mj+7#kjfMAgFKw+5s^`J>;QlP9$S?PR%=$HTzo3l9?ED;xoI3-JvF1F8#m>QQXW*8-A
zz9>Nv%ZWK*kqtikEV84R*{M9Xh{ZXlvs2k(?iKO2Od&_ah_8qXGr62B5#JKAMv5?%
zE8;ie*i;TP0{|3BY!`4?i6S-;F^L}%f`(o2L0Dz>ZZynda
zx(`h}FNp#{x{a}MR#uh~m%}m=7xWMPPlvyuufAs_KJJh5&|Nw4Oks+EF0LCZEhSCJ
zr)Q)ySsc3IpNIG#2mW;)20@&74xhslMTCi_jLS<9wVTK03b<)JI+ypKn)naH{-njZ
z7KzgM5l~}{fYfy=Kz{89C<+lE(fh?+|D$id_%I-TdEqLPi*x_)H~nY9rQ#)noA5c#
zB`Ac>67n+__r%Wu$9dISw03U@r;Pdb`_%=KWKZEBGfDjQH
zqKX(I48#TTN1~8;gpaI8ijWGV0cl0Lkv`-mGK$O~Z&4T&1w}_0qHIx~s8AFOwFb2w
zRf4KU9Y%GadQmq~W2jlwM>H9&h}K8jpuNx$=mc~Yx)5D~ZbG-CFQRXwC(y4k7z_=g
zjj_UbVj?j~n6;P^%sxyT<{V}aGme?VVzKgAeXJeUAIroFu!Yzv>{0Al>=1SW`vynE
zso>0T?zku%50{Utz#YMz!42UiaSM1Uye8fT?~iBWbMU43MtnE^I(`DbK#(SA6YK~f
zge1ZyLM5SA?cA^NYNxAX$R>L=^W`U
z=_Q#=)*?HSqsRjC4stX30{Id7jRZx)NWx2kEwMqOMxsMvNaDF9UQ$!iNpiJhu4IMe
z3CZh{Gg5ddEh!f%rqp_=8mW^~BT{qH6lqgwf9X`|66qt-SEQ$8urgXQZZd3{0-1v{
z7i7jM2t}RZLSa!hQyM83DHBu-Rh#NXO`;Z4zoQONXJut%m&u07X3N&do|YY@Av7(T
z7cGTWN;^&)roCIDw8Uu%XUX;@txJZM%*!p6bCl!A70I>9-IjYNPnUO-PnO>$-zoo4
z0i~d)5U7x)uwUV#!pu_YQro4hrA14RFTJM-E9xl*DXvvKsMxPKr=+app_HyvrF21Q
zMwzDUsGOu+u6#y$T7{xwufkO+S2?TllrBqmqNmU+>Amz>RYg@#RiSFV>VWEknzmY~
zTE1GF+Cz1MIzv5Pys-#cBCZ~;
zMXm#GGH#)6)ozd6)!Y-@Tijj2>R4y()XvmDLKXQ&yjjk&I!+oQOrohQ}U>eb4k~HZbSnyy9x(
zW?3$*y{uH6t~>7#3G*6dj`%lF|oWk4CLGP(p*(a%)B
zP)E2$IF@OjS(EuDD=h0owsbZxyFW)SXM4_Mu6ypcYf)=iYkTrk^ETy;t#evezaCm2
zx4vhC`i6oH6B|7?9^ORQl)UMue3SgL{8yX9H+L5(6>KaR-{P^QrBI@fUpTVWc5B@>
z)Hd$6f$iqotG0hEVi#R4HYu(seqX{Wx%!RiH@;dd*9H0$NjB!N_E9`?+$Pe+^P4d?`Y6!s5po@n0fF?V_0L~w~TL_n-rRgn?4-k
z9U46xbhx+Ks=4`y;*ru8xJB49eKh*$jqhB)>uNP@t#6~X6(0k~gvXwKAN&3Aai8No
zCm1JMf6)A)ww=;m)B$zmbj)@pc8+#Mb`75NKH1Z4+ui=7(T|5tsh+AiEql834B{
znNMeP&(57oKR0te;rw_{Owaub5f^Ut2KEkI^tpKXlKZ6#eNKI6FWX%{b;ah&$*YX3
zo!2a{b@W^GxBq1EQ~QABK*x2f>s>djZ*&hXA3QVUFm(Q=>&;8Iyl!2)z2f%ZaOm)z
zk?4`pJM24CcT?`ZxR-fv;r_-4=m$j)r5;v1Qhe0#v+mDrqn4wm$6Uwy9|u3aKh7F|
z_DjYu?mT-%DP~zdZD6*{hzpfVoGnQ(rI47rl{xbNDUeZQr}_casZQ@3HSIKj?nw{^;}Z
z!Kc(upZ)~{nDhK^CfpAI000SaNLh0L04^c`04^c{s^Z;}000P&Nkl?sv~Q
z_uMNOhJpVFh(qoF95Ih&tSU
z_WiwiyCbXz+XbLS)78#_U{8O3TCwqL$=|pg>dVYR5G3A?gj+m9MqxFj7N*-K|4KL1
z*EBu+621O8@h4>VS$g*z@u#wA{-v&~TLY?hn`US)*%PuhWY}_xsh>poA{hS3
zBMb(N^<%B~?95J{28(P%z2gLWJy&6p68ZPA7Ql+UXK|7KQRpLA@WKO>rYE+mK?(Pqu=E
zTEv7XqJ?NySxCZ~pUkn$2ZbX6t?r93$%&Ys{RoBSIlOy$3o2XpLXj*;R8laG@?(m9
z0dmt8V$zs-EH5rmE*Z?DqXqLN$DGVn*H*>;=HVf
z(K%R;tIpHh<+P2-xrty%p%A1l1xd_fp1{iK4GM&3F_c&%G366`0G-
zkBH&PT0kDTq-sHhZAG>%nK!B^3{T8`6}jYrn(mL#>^jR^3MJpN41!?nCa$YIT7;Uj
za}fx#T4KOo`F;L#jHQ^Dz50r)bqRDMR4j`6Rx3-Y$in?Y
zCLbZDM;=E;Ovw4p_ZdBxd&=ETUpuDKDyO9{Ae@5e6M#yShD%sBYbdL{kb1Cp^kM
z5>$OuGm`N@-bNDq0pBsKU@=dbWK=qP$LW5rb&??JkwXg@OZ-ygab(1V6mr7CCunB;}WAyxZB9MPU;Q>8~~N
z7I=Twu_y6*sezpow^`wF;o1jDOsnaewlJ6ttK<6
z;JX*Q4lT0CN$Y8c`Pev0%yO^Cdh}|;6v(prRc?$R3p#SGgA-{7u)oFFu`E`zZikzp
zkp(HBh^aH$e94RJ20%hyFhqH8K)r$5?uzaNC3#J&`@#Wl$R*LXok&Ai*>otT@P@|P
ze7K!s?2@D{!EEa;|4R&2$GS9Gz<5;0r5&m2+jUfDi0N}gErJPhIo(6CKf~sL8Kpi84btZ#5?=TaB$z(QFngESY4G$Nd&us#Y8aJJ*Ip?^G>D{gPj_H9)O_x
zC!5t^e!Pg2yKdfn;)OI4TOyA!%vL4gq-ru%3$BKY5C8ZYK0TiXvq{)(vIN^`+m=(G
zTU;&~iA9E(AVW@|8JI^H%`yaK;ZPTj_;igI@@FDDDo+z>8K5&9PU2x&*7Jg-^wg^b
z5EZr{gPr?i{r0%L^bd<_mi!J4OShr7^bPbbW!!mq&|1F3Y!jk1Yv4qGf;!Gk7
z)dR$1M0mB>)$cpRHN^Lbtwbh_DeO(N7~7NG-SezoClZN@$3g5PI$?6P&-WkRkwpEX
zh&d%bS$X?Kut@>@tZ6OY>MG{XL&zesZOP6Qrm~@G!G|5wEiDzG>jA8ES4pAQLvui&
zdx2~(6rTF%Ol`#~!FBzRKsm$jq%k4?Eqp(kDY)xul<`FiH_=7q7tFtcjf5n}31Kj>
z1s}Bkw!X}vITIa-ChvbFWO!9%@cwWHJLD?pTRwF#vp(h&E9fd8=@5lM`KKEVx+E??
zm36`q^$5R@{<|CrmAfET@3q9#(tklUs7?<9d(T>CbC}#a1CpxfbjxFiPA0Pp>@biw
z_`BgHe$*K5p(vxE>#iJ~gdzSpDvY6W&uw
+
+ table_postgis
+
+
+
+ 0
+ 0
+ 533
+ 364
+
+
+
+ Ajout d'une table
+
+
+
+
+ 360
+ 330
+ 161
+ 32
+
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
+
+ 170
+ 0
+ 171
+ 31
+
+
+
+
+ 14
+ 75
+ true
+
+
+
+ Création de table
+
+
+
+
+
+ 10
+ 80
+ 511
+ 101
+
+
+
+
+ 75
+ true
+
+
+
+ Tester mon eligibilite :
+
+
+ Qt::AlignCenter
+
+
+
+
+ 10
+ 19
+ 491
+ 71
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+ Compte
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+ Couche
+
+
+
+
+
+
+
+
+
+ 10
+ 40
+ 511
+ 31
+
+
+
+ -
+
+
+
+ 90
+ 16777215
+
+
+
+ Code analytique :
+
+
+
+ -
+
+
+
+
+
+
+
+ 10
+ 180
+ 511
+ 151
+
+
+
+
+ 75
+ true
+
+
+
+ Les changement :
+
+
+ Qt::AlignCenter
+
+
+
+
+ 10
+ 20
+ 491
+ 61
+
+
+
+ -
+
+
+
+ 50
+ false
+
+
+
+ Nouvau nom :
+
+
+
+ -
+
+
+
+ 50
+ false
+
+
+
+ Partie renome :
+
+
+
+ -
+
+
+ false
+
+
+
+ 75
+ true
+ true
+
+
+
+
+ -
+
+
+
+
+
+
+
+ 10
+ 80
+ 491
+ 61
+
+
+
+ -
+
+
+
+ 130
+ 16777215
+
+
+
+
+ 50
+ false
+
+
+
+ Département/Animation :
+
+
+
+ -
+
+
+ Animation territoriale
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ table_postgis
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ table_postgis
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git a/plugins.xml b/plugins.xml
index 06f08add..0f69c8e8 100644
--- a/plugins.xml
+++ b/plugins.xml
@@ -1,8 +1,8 @@
-
+
- 2.5
+ 2.6
3.16
https://plateformesig.cenra-outils.org/
CenRa_POSTGIS.zip
@@ -11,7 +11,7 @@
https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip
CEN-Rhone-Alpes
2024-02-06
- 2025-02-04
+ 2025-02-12
False
False
cenra,postgis