This is NOT a closed question. The following links does NOT provide an answer to the solution:
The Vector layer still remains invalid with the recommended changes being made.
I can also confirm my QgsApplication prefixpath is correct
I have a QGIS script I am writing in PyCharm, that I am trying to load a vector layer stored in a PostgreSQL database. When I print the layer's isValid() method I get False. Here is my code:
from qgis.core import * db_client = 'postgres' db_host = 'localhost' db_port = '5432' db_name = 'database' db_user = 'user' db_password = 'pass123' db_schema = 'public' tablename = 'Geo_Layer' geometrycol = 'geom' tract_number_index = 3 QgsApplication.setPrefixPath('/usr', True) qgs = QgsApplication(, False) # I have also tried the following: # qgs = QgsApplication(, True) qgs.initQgis() geo_uri = QgsDataSourceUri() geo_uri.setConnection(db_host, db_port, db_name, db_user, db_password) geo_uri.setDataSource(db_schema, tablename, geometrycol, '', 'id') # I have also tried the following # geo_uri.setDataSource(db_schema, tablename, geometrycol) geo_layer = QgsVectorLayer(geo_uri.uri(False), "Test", "postgres") # Other configurations I have tried # geo_layer = QgsVectorLayer(geo_uri.uri(), "Test", "postgres") # geo_layer = QgsVectorLayer(geo_uri.uri(), "Test", "ogr") # geo_layer = QgsVectorLayer(geo_uri.uri(False), "Test", "ogr") # A working version using an exported geopackage # geo_layer = QgsVectorLayer('/home/<path to geopackage>/geo_layer.gpkg|layername=geo_layer', "Test", "ogr") print(geo_layer.isValid()) qgs.exitQgis()
I have provided the other QgsVectorLayer configurations I have tried. All print that the layer is not valid.
QGIS Version: 3.16.3-Hannover Python Version: 3.8.5 Ubuntu Version: 20.04.02 LTS
I have check my credentials with DBeaver and I am able to connect.
I have made sure I have the correct QgsApplication prefixPath by opening my QGIS Desktop, opening the Python Console and executing the following:
Also in QGIS Desktop the specific vector layer I am trying to validate, I can export that layer into a GeoPackage and connect to it and validate the Vector Layer. So I think I have the correct QgsApplication configuration.
geo_layer = QgsVectorLayer('/home/<path to geopackage>/geo_layer.gpkg|layername=geo_layer', "Test", "ogr")
This is the workaround I have in place, but I would like to connect directly to my PostgreSQL database.