Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous et toutes,
J'ai découvert récemment qu'il était possible, sans QGIS, d'enregistrer un projet .qgs non pas sur un espace serveur classique mais directement sur Postgresql (Dans Qgis 3.16 = Projet\Enregistrer sous\Postgresql...).
Je souhaitais donc interroger les informations relatives au paramétrage de mes couches qgis dans PgAdmin4 (essentiellement pour connaître les couches postgis appelées dans ce projet qgs) mais ces informations sont stockées dans un champ "content"au format bytea, illisible au 1er abord.
En parcourant les forums et sites officiels tels que ceux-ci :
https://www.postgresql.org/docs/9.1/fun … tring.html
https://dba.stackexchange.com/questions … n-postgres
J'ai découvert qu'il fallait utiliser des fonctions d'encodage et/ou de décodage en m'appuyant sur des formats de type base64, hex ou escape pour traduire ces données bytea en informations intelligibles.
Cependant après plusieurs tests de ce type dans pgAdmin, je n'obtiens aucun résultat probant :
select *,
encode(content,'hex') tt
from admingeo.qgis_projects
SELECT convert_from(decode(t, 'escape'), 'UTF8')
FROM encode((select content from admingeo.qgis_projects), 'escape') as tt
L'un ou l'une d'entre vous aurait-il (-elle) une idée me permettant de traduire le contenu de ce champ en informations intelligibles ?
Merci d'avance pour votre aide
Hors ligne
Bonjour,
De ce que je vois dans le code source de QGIS, le fichier est enregistré sous forme compressée (zip), donc vous ne pourrez pas voir le contenu simplement en affichant le champ bytea.
Julien.
https://rjuju.github.io/
Hors ligne
Ces informations sont donc stockées dans Postgresql mais non requêtables via PgAdmin ?
Il est donc impossible via PgAmin de connaître la liste des tables postgis appelées dans un projet qgis ?
Merci d'avance pour votre réponse
Hors ligne
Tout d'abord pour être clair je n'ai jamais utilisé qgis, et je ne connais rien à cet outil.
Ces informations sont donc stockées dans Postgresql mais non requêtables via PgAdmin ?
Vous pouvez consulter le contenu, qui est l'équivalent d'un fichier zippé. Vous pouvez tout à fait extraire le contenu et le décompresser, mais à priori pas en SQL.
Il est donc impossible via PgAmin de connaître la liste des tables postgis appelées dans un projet qgis ?
Sans connaitre QGIS la question n'a malheureusement aucun sens pour moi.
Julien.
https://rjuju.github.io/
Hors ligne
Pas de problème, je vais donc explorer cette voie.
Merci beaucoup pour votre aide.
Bonne fin de journée
Hors ligne
Si cela peut aider, la partie récupération des données est à priori ici: https://github.com/qgis/QGIS/blob/maste … #L123-L132
QString sql( QStringLiteral( "SELECT content FROM %1.qgis_projects WHERE name = %2" ).arg( QgsPostgresConn::quotedIdentifier( projectUri.schemaName ), QgsPostgresConn::quotedValue( projectUri.projectName ) ) );
QgsPostgresResult result( conn->PQexec( sql ) );
if ( result.PQresultStatus() == PGRES_TUPLES_OK )
{
if ( result.PQntuples() == 1 )
{
// TODO: would be useful to have QByteArray version of PQgetvalue to avoid bytearray -> string -> bytearray conversion
QString hexEncodedContent( result.PQgetvalue( 0, 0 ) );
QByteArray binaryContent( QByteArray::fromHex( hexEncodedContent.toUtf8() ) );
device->write( binaryContent );
Et la décompression ici: https://github.com/qgis/QGIS/blob/maste … .cpp#L1469
if ( !storage->readProject( filename, &inDevice, context ) )
{
[...]
}
returnValue = unzip( inDevice.fileName(), flags ); // calls setError() if returning false
Julien.
https://rjuju.github.io/
Hors ligne
Bonjour,
Je vais donc explorer cette nouvelle piste.
Merci encore pour votre aide.
Bonne journée.
Hors ligne
Pages : 1