<div dir="ltr"><div><br></div><div>Hello,</div><div><br></div><div>I am trying to add a new postgis layer to Qgis project using a server plugin, if I use a connection string with "host, dbname, passwd, user" it works flawlessly.</div><div>But I need to use pg_service file, it does not work. I thought it could be FCGI not passing PGSERVICEFILE envvar, but it actually does. <font face="arial, sans-serif">My function register_postgis_layer simple doesn't work inside executeRequest, but it works on ProjectService.__init__;</font></div><div>I tried using psycopg2 with service connection string, and it has the same problem.</div><div><br></div><div>Here is sample code from my qgis server plugin.</div><div><br></div><font face="monospace">from qgis.server import QgsService, QgsServerRequest<br>from qgis.core import QgsMessageLog, QgsProject, QgsDataSourceUri, QgsVectorLayer, QgsMapLayer, QgsWkbTypes<br>import os<br><br>PROJECT_SQL_FILTER = 'is_deleted=false'<br>PROJECT_SERVICE = 'PROJECT_SERVICE'<br><br># This works<br>PG_CONNECTION = f"host=localhost dbname=BDGEO user=postgres password=123456"<br><br># This does not work<br>PG_CONNECTION = f"SERVICE={service}"<br><br>def register_postgis_layer(table_name):</font><div><font face="monospace">    uri = QgsDataSourceUri()<br>    uri.setEncodedUri(PG_CONNECTION)<br>    uri.setDataSource ("public", table_name, "geom", PROJECT_SQL_FILTER)<br>    vlayer = QgsVectorLayer(uri .uri(False), table_name, "postgres")<br><br>    qgs_project = QgsProject.instance()<br>    qgs_project.addMapLayer(vlayer)<br>    qgs_project.write()<br>    return True<br><br><br>class ProjectService(QgsService):<br><br>    def __init__(self):<br>        QgsService.__init__(self)<br><br>    def name(self):<br>        return "PROJECTCTL"<br><br>    def version(self):<br>        return "1.0.0"<br><br>    def executeRequest(self, request, response, project):<br>        params = request.parameters()<br>        QgsMessageLog.logMessage(params.get('REQUEST'))<br><br>        try:<br>            requestMethod = params.get('REQUEST', '').upper()<br>            if requestMethod == 'REGISTERLAYER':<br>                layers = get_available_layers_for_register()<br>                layer_to_register = params.get('LAYER', '')<br>                if register_postgis_layer(layer_to_register):<br>                    response.write(f'Layer {layer_to_register} registered!')<br>                    response.setStatusCode(200)<br>                else:<br>                    response.write(f'Layer {layer_to_register} not registered!')<br>                    response.setStatusCode(400)<br>                return</font><br>            <br></div></div>