Skip to content

Commit 44a054d

Browse files
committed
Merge pull request #1262 from nyalldawson/processing_postgis
Improvements to processing "Import into PostGIS" algorithm
2 parents 839c3e7 + 748d261 commit 44a054d

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

python/plugins/processing/admintools/ImportIntoPostGIS.py

100644100755
+27-6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from processing.parameters.ParameterBoolean import ParameterBoolean
3636
from processing.parameters.ParameterVector import ParameterVector
3737
from processing.parameters.ParameterString import ParameterString
38+
from processing.parameters.ParameterSelection import ParameterSelection
3839
from processing.tools import dataobjects
3940

4041
from processing.admintools import postgis_utils
@@ -48,15 +49,18 @@ class ImportIntoPostGIS(GeoAlgorithm):
4849
INPUT = 'INPUT'
4950
OVERWRITE = 'OVERWRITE'
5051
CREATEINDEX = 'CREATEINDEX'
52+
GEOMETRY_COLUMN = 'GEOMETRY_COLUMN'
53+
LOWERCASE_NAMES = 'LOWERCASE_NAMES'
5154

5255
def getIcon(self):
5356
return QIcon(os.path.dirname(__file__) + '/../images/postgis.png')
5457

5558
def processAlgorithm(self, progress):
56-
connection = self.getParameterValue(self.DATABASE)
59+
connection = self.DB_CONNECTIONS[self.getParameterValue(self.DATABASE)]
5760
schema = self.getParameterValue(self.SCHEMA)
5861
overwrite = self.getParameterValue(self.OVERWRITE)
5962
createIndex = self.getParameterValue(self.CREATEINDEX)
63+
convertLowerCase = self.getParameterValue(self.LOWERCASE_NAMES)
6064
settings = QSettings()
6165
mySettings = '/PostgreSQL/connections/' + connection
6266
try:
@@ -80,14 +84,19 @@ def processAlgorithm(self, progress):
8084
raise GeoAlgorithmExecutionException(
8185
"Couldn't connect to database:\n" + e.message)
8286

87+
geomColumn = self.getParameterValue(self.GEOMETRY_COLUMN)
88+
if not geomColumn:
89+
geomColumn = 'the_geom'
90+
8391
uri = QgsDataSourceURI()
8492
uri.setConnection(host, str(port), database, username, password)
85-
uri.setDataSource(schema, table, 'the_geom', '')
93+
uri.setDataSource(schema, table, geomColumn, '')
8694

8795
options = {}
8896
if overwrite:
8997
options['overwrite'] = True
90-
98+
if convertLowerCase:
99+
options['lowercaseFieldNames'] = True
91100
layerUri = self.getParameterValue(self.INPUT)
92101
layer = dataobjects.getObjectFromUri(layerUri)
93102
(ret, errMsg) = QgsVectorLayerImport.importLayer(
@@ -104,19 +113,31 @@ def processAlgorithm(self, progress):
104113
'Error importing to PostGIS\n%s' % errMsg)
105114

106115
if createIndex:
107-
db.create_spatial_index(table, schema, 'the_geom')
116+
db.create_spatial_index(table, schema, geomColumn)
108117

109118
db.vacuum_analyze(table, schema)
110119

120+
def dbConnectionNames(self):
121+
settings = QSettings()
122+
settings.beginGroup('/PostgreSQL/connections/')
123+
return settings.childGroups()
124+
111125
def defineCharacteristics(self):
112126
self.name = 'Import into PostGIS'
113127
self.group = 'PostGIS management tools'
114128
self.addParameter(ParameterVector(self.INPUT, 'Layer to import'))
115-
self.addParameter(ParameterString(self.DATABASE,
116-
'Database (connection name)'))
129+
130+
self.DB_CONNECTIONS = self.dbConnectionNames()
131+
self.addParameter(ParameterSelection(self.DATABASE, 'Database (connection name)',
132+
self.DB_CONNECTIONS))
133+
117134
self.addParameter(ParameterString(self.SCHEMA, 'Schema (schema name)'))
118135
self.addParameter(ParameterString(self.TABLENAME, 'Table to import to'
119136
))
137+
self.addParameter(ParameterString(self.GEOMETRY_COLUMN, 'Geometry column', 'the_geom'
138+
))
120139
self.addParameter(ParameterBoolean(self.OVERWRITE, 'Overwrite', True))
121140
self.addParameter(ParameterBoolean(self.CREATEINDEX,
122141
'Create spatial index', True))
142+
self.addParameter(ParameterBoolean(self.LOWERCASE_NAMES,
143+
'Convert field names to lowercase', False))

src/providers/postgres/qgspostgresprovider.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -2844,8 +2844,6 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(
28442844
QString *errorMessage,
28452845
const QMap<QString, QVariant> *options )
28462846
{
2847-
Q_UNUSED( options );
2848-
28492847
// populate members from the uri structure
28502848
QgsDataSourceURI dsUri( uri );
28512849
QString schemaName = dsUri.schema();
@@ -3048,6 +3046,12 @@ QgsVectorLayerImport::ImportError QgsPostgresProvider::createEmptyLayer(
30483046
continue;
30493047
}
30503048

3049+
if ( options->contains( "lowercaseFieldNames" ) && options->value( "lowercaseFieldNames" ).toBool() )
3050+
{
3051+
//convert field name to lowercase
3052+
fld.setName( fld.name().toLower() );
3053+
}
3054+
30513055
if ( !convertField( fld ) )
30523056
{
30533057
if ( errorMessage )

0 commit comments

Comments
 (0)