Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Tue 08 March 2022 07:54

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

génération automatique de 439 tables

Bonjour,

J’aurais besoin d’aide pour le problème suivant :


> Contexte :

J’ai un tableau qui contient les différentes observations d’une espèce dont les individus sont pucés. Chaque individu a un numéro de puce différent mais peut être observé plusieurs fois dans la nature.



J’ai une table de la forme suivante : (cf pièce jointe : table originale)

J’ai fait la requête suivante :
select puce
from ma_table
group by ma_table.puce

ce qui m’a permis de constater que j’avais 439 puces différentes dans mon vrai tableau.



> Objectif :

J’aimerais diviser mon tableau en différents tableaux où chacun est associé à un individu (donc à un numéro de puce distinct). En tout, il me faudrait donc 439 tableaux, le but étant notamment de faire un suivi temporel des individus.

Par exemple, en repartant du tableau présenté précédemment (cf tableau original en pièce jointe), j’obtiendrais 3 tables : (cf sous-tables en pièce jointe)




J’ai fait de nombreuses recherches mais je n’ai trouvé aucune solution qui correspondrait à un script SQL permettant de générer automatiquement ces 439 tables (parce que les créer une par une ça serait un peu long).

Est-ce que quelqu’un pourrait m’aider s’il-vous-plaît ?


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Tue 08 March 2022 09:36

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Bonjour,

moi je partirais plus sur la création de vues basées sur la table d'origine à la place des 439 tables.
Au moins les données sont toujours centralisées dans une même table, ce qui est plus pratique pour générer des statistiques par la suite.

une piste à creuser pour générer ce script :
https://www.postgresqltutorial.com/plpgsql-record/

Hors ligne

 

#3 Tue 08 March 2022 10:33

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: génération automatique de 439 tables

Salut,

comme indiqué par Franck, un morceau de code anonyme plpgsql ferait l'affaire. Je suis aussi d'accord sur le fait que créér des vues plutot que des tables serait plus judicieux.

Vous avez aussi la possiblité d'utiliser une fonctionnalité interessante du client en ligne de commande psql : la méta commande \gexec.
Celle-ci vous permet d'executer les resultats de la dernière requête executée par le client comme des nouvelles requête SQL.
Cela vous donnerait du coup quelquechose comme :

Code:

SELECT 
   'CREATE OR REPLACE VIEW vue_puces.vue_' || puce
   || ' AS SELECT date, poids FROM ma_table '
   || ' WHERE puce =\''|| puce || '\'' 
FROM
   ma_table
GROUP BY
   puce
;

Cette requête va renvoyer 439 lignes qui contiendront chacune la commande de création des vues.

Une fois cette requête executée dans psql, on tape la métacommande \gexec puis entrée, et les 439 vues seront créées.

réference :

https://docs.postgresql.fr/10/app-psql. … A-COMMANDS

Dernière modification par tumasgiu (Tue 08 March 2022 10:34)

Hors ligne

 

#4 Tue 08 March 2022 11:03

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Bonjour,

Merci pour vos réponses. J'ai bien suivi vos liens, le problème c'est qu'il me faudrait créer une vue en fonction du numéro de puce sur lequel le futur utilisateur de ma base de données (que je dois créer) voudra des renseignements.

Pour info, j'utilise pgAdmin (mais je suis novice).



> Dans le premier lien de Franck2908, la vue créée correspond à une où plusieurs données définies, spécifié dans le where.
Grossomodo, cela donnerait :

create view ma_vue
as select *
from ma_table
where puce=numero_choisi_par_utilisateur

Mais du coup je ne sais pas comment faire pour qu'on ait une visualisation du numéro choisi par l'utilisateur.... (parce-que là forcément ça ne fonctionne pas)



> Par rapport à ce qui est indiqué par tumasgiu, j’ai essayé d’utiliser le script, mais cela ne fonctionne pas. Je l’ai mis sous la forme suivante (je ne comprenais pas pouquoi il y avait plein de ||, de \ et de ‘) :

SELECT
   (CREATE OR REPLACE VIEW vue_puces AS (
       SELECT date, poids
       FROM ma_table
       WHERE puce=num_puce
    ))
FROM
   ma_table
GROUP BY
   puce
;


Je ne sais pas ce qui ne va pas dans les modifications que j'ai effectuées (mis à part le fait que num_puce n’est pas défini puisque c’est l’utilisateur qui doit le donner), pgAdmin me renvoit l’erreur suivante :

ERROR: ERREUR: erreur de syntaxe sur ou près de « CREATE » LINE 2: (CREATE OR REPLACE VIEW vue_puces AS (


Pour la métacommande \gexec , j’ai bien été regarder sur le lien indiqué mais je n’ai pas tout compris….. Je ne sais pas trop comment utiliser psql sans pgAdmin. Dans mon navigateur, j’ai trouvé une application appelée SQL Shell (psql), je ne sais pas si c’est de cela dont il est question concernant la métacommande, et je ne sais pas non plus comment cela s’utilise. Je suis très preneuse d’explications (simples si possible).


Merci d'avance !

Hors ligne

 

#5 Tue 08 March 2022 11:22

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Kiecane, où est stocké pour le moment le num_puce que l'utilisateur doit te fournir ?

Hors ligne

 

#6 Tue 08 March 2022 11:22

tevrard
Participant assidu
Date d'inscription: 23 May 2016
Messages: 319

Re: génération automatique de 439 tables

Kiecane a écrit:

> Par rapport à ce qui est indiqué par tumasgiu, j’ai essayé d’utiliser le script, mais cela ne fonctionne pas. Je l’ai mis sous la forme suivante (je ne comprenais pas pouquoi il y avait plein de ||, de \ et de ‘) :

SELECT
   (CREATE OR REPLACE VIEW vue_puces AS (
       SELECT date, poids
       FROM ma_table
       WHERE puce=num_puce
    ))
FROM
   ma_table
GROUP BY
   puce
;


Aïe ! C'est sur que ça risque de moins bien marcher si vous enlevez la moitié de la requête !

Le but de la commande de tumasgiu est de vous renvoyer le code (en texte) de création des 439 vues. Le résultat sera :

CREATE OR REPLACE VIEW vue_puces.vue_1 AS SELECT date, poids FROM ma_table WHERE puce ='1'
CREATE OR REPLACE VIEW vue_puces.vue_2 AS SELECT date, poids FROM ma_table WHERE puce ='2'
CREATE OR REPLACE VIEW vue_puces.vue_3 AS SELECT date, poids FROM ma_table WHERE puce ='3'
...
CREATE OR REPLACE VIEW vue_puces.vue_439 AS SELECT date, poids FROM ma_table WHERE puce ='439'


Ensuite vous exécuterez la commande /gexec qui va elle même exécuter le résultat de la dernière requête, ici les 439 Create View ...


Les apostrophes servent à déclarer du texte
Les  || permettent de concaténer (accoler des chaînes de textes)

Je suis preneur de l'explication sur les / et plus généralement de la clause where de tumasgiu, j'ai du mal à saisir l'ordre des apostrophes.



En revanche, super intéressante cette technique de métacommandes

Dernière modification par tevrard (Tue 08 March 2022 11:24)

Hors ligne

 

#7 Tue 08 March 2022 11:28

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Pour l'instant, num_puce n'est stocké nulle part..... Je ne savais pas qu'il fallait le stocker et je ne sais pas comment ni où le stocker. Je veux bien qu'on m'explique simplement si c'est possible.

Merci tevrard pour les explications, c'est plus clair maintenant (sauf la partie sur la métacommande mais j'essaye de comprendre étape par étape).

Hors ligne

 

#8 Tue 08 March 2022 11:29

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Kiecane a écrit:

je ne comprenais pas pouquoi il y avait plein de ||, de \ et de ‘ 


il ne faut pas remplacer ou supprimer les ||, \, ', ils font partie de la requête.

|| sert à concaténer
\ est un caractère d’échappement
' est une quote qui entoure du texte ici

Hors ligne

 

#9 Tue 08 March 2022 11:33

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

D'accord, merci beaucoup. Mais du coup, je pense qu'il faut d'abord que je règle le problème avec num_puce pour que cela fonctionne (cf mon message précédent).

Hors ligne

 

#10 Tue 08 March 2022 11:33

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

tevrard a écrit:

En revanche, super intéressante cette technique de métacommandes


effectivement je ne connaissais pas non plus cette technique !

Hors ligne

 

#11 Tue 08 March 2022 11:41

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: génération automatique de 439 tables

ERROR: ERREUR: erreur de syntaxe sur ou près de « CREATE » LINE 2: (CREATE OR REPLACE VIEW vue_puces AS (


cela ne marche pas car le contenu de votre clause SELECT est une requête CREATE ce qui est interdit. Je suis allé un peu vite dans mon
premier message : les requêtes construites doivent être du texte pour pouvoir être interprétées correctement par la métacommande.

Vous pouvez construire des chaines de caractère avec l'opérateur de concaténation de chaine || et donc mélanger du texte constant (le
corps des requêtes de création de vos vues, encadrés par des ' ) avec des des valeurs variables (les numero de puce contenu dans votre table).


Voilà ce que devrait donner votre requête.

Code:

SELECT
   ' CREATE OR REPLACE VIEW vue_puce'|| num_puce ||' AS ( '
 ||' SELECT date, poids '
 ||' FROM ma_table '
 ||' WHERE puce=\'|| num_puce::text||'\')'
FROM
   ma_table
GROUP BY
   puce
;

Dans mon navigateur, j’ai trouvé une application appelée SQL Shell (psql),


Je pense que c'est celà. Les versions récentes de pgadmin offrent également la possiblité de lancer psql dans votre navigateur.
Si vous n'avez jamais utilisé psql, je vous conseille de passer par là.

Le shell sql vous permet de réaliser exactement la même chose que PgAdmin, mais en ligne de commande.
Lorsque vous lancez cette application, vous etes connecté à la base de donnée et pouvez dialoguer avec elle au travers de la ligne de commande.
Par exemple, une fois l'application lancée, en tapant

Code:

SELECT 1 ;

puis la touche entrée vous allez envoyer cette commande à la base de données et récuperer le resultat.

Une métacommande se lance de la même manière qu'une commande SQL classique, dans votre cas :

Code:

\gexec

puis entrée.

Une métacommande est une instruction qui n'est non pas donnée à votre serveur de base de données, comme une requête select, mais
à votre client psql.

Par exemple, vous avez la métaacommande \h qui vous permet de consulter un aide mémoire pour les commandes SQL. Exemple, en tapant

Code:

\h SELECT

puis entrée, psql va vous afficher le pense bête de la commande SELECT.
La commande \? permet quant à elle de lister toutes les métacommandes proposées par psql.

Hors ligne

 

#12 Tue 08 March 2022 11:59

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Kiecane a écrit:

Pour l'instant, num_puce n'est stocké nulle part..... Je ne savais pas qu'il fallait le stocker et je ne sais pas comment ni où le stocker. Je veux bien qu'on m'explique simplement si c'est possible.

Merci tevrard pour les explications, c'est plus clair maintenant (sauf la partie sur la métacommande mais j'essaye de comprendre étape par étape).


il suffit de rajouter un champ supplémentaire dans la table qui contiendra le numéro donné par les utilisateurs

Hors ligne

 

#13 Tue 08 March 2022 12:00

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Ok, merci beaucoup pour ces explications précises. J'ai recopié le code que vous m'avez indiqué dans pgAdmin :

SELECT
   ' CREATE OR REPLACE VIEW vue_puce'|| num_puce ||' AS ( '
||' SELECT date, poids '
||' FROM ma_table '
||' WHERE puce=\'|| num_puce::text||'\')'
FROM
   ma_table
GROUP BY
   puce
;


mais l'erreur suivante m'était indiquée :
ERROR: ERREUR:  erreur de syntaxe sur ou près de « ) »
LINE 5:  ||' WHERE puce=\'|| num_puce::text||'\')'


J'ai donc fait la modification suivante (ce n'était peut-être pas judicieux) :

SELECT
   ' CREATE OR REPLACE VIEW vue_puce'|| num_puce||' AS ( '
||' SELECT date, poids '
||' FROM ma_table '
||' WHERE puce=\'|| num_puce::text||'\'')'
FROM
   ma_table
GROUP BY
   puce
;

et j'ai obtenu une nouvelle erreur :
ERROR: ERREUR:  la colonne « num_puce » n'existe pas
LINE 2:    ' CREATE OR REPLACE VIEW vue_puce'|| num_puce||' AS ( '


Si j'ai bien compris (ce qui n'est pas sûr), une fois que cette commande ne me renverra plus d'erreur dans pgAdmin, je devrai ouvrir SQL Shell (psql) et écrire \gexec (puis faire entrée). Et du coup, à ce moment là, il suffira d'écrire le numéro de puce pour lequel je veux ma "sous-table" (cf ma pièce jointe de mon premier message) ? Est-ce que c'est ça ou pas du tout ?

Hors ligne

 

#14 Tue 08 March 2022 12:04

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

il suffit de rajouter un champ supplémentaire dans la table qui contiendra le numéro donné par les utilisateurs


D'accord, merci, je ne savais pas que je devais créer une table correspondant à la requête qu'effectuera l'utilisateur. Est-ce que c'est toujours nécessaire ? Autrement dit, est-ce qu'il faut toujours créer une table qui contiendra les requêtes futures des utilisateurs sur la base de données ?

Et du coup, dans ce cas-ci, est-ce que ma table doit juste être composée d'une colonne num_puce vide ou est-ce qu'elle doit contenir d'autres informations ?

Hors ligne

 

#15 Tue 08 March 2022 13:02

Al3+
Participant actif
Lieu: Fécamp
Date d'inscription: 5 Sep 2005
Messages: 50

Re: génération automatique de 439 tables

Bonjour,

Je ne vois pas pourquoi vous voulez passer par des créations de vues à la volée, et encore moins par la création de 439 tables avec une structure identique : ce n'est pas le principe d'une base de données.

Imaginez si vous aviez des millions de puces... Vous auriez autant de tables ?

Sauf s'il y a des contraintes particulières non évoquées, j'imagine qu'une seule vue figée qui pointe sur l'ensemble des données de la table d'origine mais sur laquelle vous appliquez un filtre en fonction de l'utilisateur peut répondre à la question.

Il y a donc une seule table, une seule vue mais la consultation filtrée personnalisée dont le paramètre est fourni par l'utilisateur.

Qu'en pensez-vous ?

Hors ligne

 

#16 Tue 08 March 2022 14:14

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

j'imagine qu'une seule vue figée qui pointe sur l'ensemble des données de la table d'origine mais sur laquelle vous appliquez un filtre en fonction de l'utilisateur peut répondre à la question.

Il y a donc une seule table, une seule vue mais la consultation filtrée personnalisée dont le paramètre est fourni par l'utilisateur.


Oui, cela conviendrait tout à fait, c'est juste que je ne savais pas que c'était possible. Du coup, cela correspondrait à ce qu'on m'a indiqué dans les messages précédents ou il s'agit d'une nouvelle possibilité ?

Hors ligne

 

#17 Tue 08 March 2022 14:27

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

J'ai créé une table utilisateur sous pgAdmin avec un champ num_puce vide.

Cependant, le code suivant :

SELECT
   ' CREATE OR REPLACE VIEW vue_puce'||num_puce||' AS ( '
||' SELECT date, poids '
||' FROM ma_table '
||' WHERE puce=\'|| num_puce::text||'\'')'
FROM
   ma_table
GROUP BY
   puce
;


me donne toujours l'erreur suivante :
ERROR: ERREUR:  la colonne « num_puce » n'existe pas
LINE 2:    ' CREATE OR REPLACE VIEW vue_puce'||num_puce||' AS ( '


Comment dois-je faire ?

Hors ligne

 

#18 Tue 08 March 2022 15:25

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: génération automatique de 439 tables

me donne toujours l'erreur suivante :
ERROR: ERREUR:  la colonne « num_puce » n'existe pas
LINE 2:    ' CREATE OR REPLACE VIEW vue_puce'||num_puce||' AS ( '


votre table contient  bien une colonne num_puce ? Vous avez bien remplacé ma_table par le nom exact de votre table ?


Si j'ai bien compris (ce qui n'est pas sûr), une fois que cette commande ne me renverra plus d'erreur dans pgAdmin, je devrai ouvrir SQL Shell (psql) et écrire \gexec (puis faire entrée). Et du coup, à ce moment là, il suffira d'écrire le numéro de puce pour lequel je veux ma "sous-table" (cf ma pièce jointe de mon premier message) ? Est-ce que c'est ça ou pas du tout ?


Presque, une fois votre requête validée, il faut la l'executer dans le shell, ensuite entrer la metacommande \gexec qui prendra les resultats de votre
requête précédent et executera les requête de création de vue. Ensuite vous aurez à votre diposition autant de vue que de puces.

Mais comme le remarque de Al3+, peut être vaut-il mieux juste filtrer votre table avec une condition where, mais votre scenario d'utilisation est un peu flou,
c'est difficile de vous conseiller.

Hors ligne

 

#19 Tue 08 March 2022 16:10

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

J'ai réussi à faire fonctionner le script en le mettant sous la forme suivante :

SELECT
   ' CREATE OR REPLACE VIEW vue_puce'||puce||' AS ( '
||' SELECT poids '
||' FROM total_obs_ve '
||' WHERE puce=\'|| puce::text||'\'')'
FROM
   total_obs_ve
GROUP BY
   puce
;


J'obtiens une table à une colonne dont le champ se nomme ?column? text et chaque ligne contient une phrase de la forme suivante :

CREATE OR REPLACE VIEW vue_puce-numeropuce AS (  SELECT poids  FROM total_obs_ve  WHERE puce=\-numeropuce\')

avec -numeropuce qui correspond à une suite de caractères (=la puce de l'individu)



> Question 1 :

une fois votre requête validée, il faut la l'executer dans le shell, ensuite entrer la metacommande \gexec qui prendra les resultats de votre
requête précédent et executera les requête de création de vue. Ensuite vous aurez à votre diposition autant de vue que de puces.


Du coup, je suis allée dans le SQL shell et j'ai noté ce même script après le postgres=# _ (postgres étant le nom de ma base) qui apparaissait. Cependant, cela ne semble pas fonctionner (quand je clique sur entrée j'ai un nombre indéfini de lignes qui apparaissent semblables à la ligne précédente : CREATE OR REPLACE VIEW vue_puce-numeropuce AS (  SELECT poids  FROM total_obs_ve  WHERE puce=\-numeropuce\')). Je me suis dit que ce n'était peut-être pas ça qu'il fallait faire, donc j'ai mis ma requête dans un bloc-note et je voulais l'exécuter dans le shell ensuite (un peu comme sous Python) mais je dois mal m'y prendre parce-que je ne vois pas comment faire....



> Question 2 :

Mais comme le remarque de Al3+, peut être vaut-il mieux juste filtrer votre table avec une condition where, mais votre scenario d'utilisation est un peu flou,
c'est difficile de vous conseiller.


Mon but final c'est de faire une application pour des agents de terrain qui ont besoin de se renseigner sur un animal trouvé dans la nature et qui porte un numéro de puce. J'aimerais bien qu'à partir de ma table originale (cf mon tout premier message), il puisse "cliquer" (ou autre chose) sur le numéro de la puce de l'animal trouvé ce qui permettrait d'avoir l'historique des différentes captures de ce dernier sous la forme d'une sous-table individuelle (cf mon premier message).
Je suis novice dans l'utilisation de pgAdmin et du langage postgre/SQL et c'est pour ça que je ne suis pas très douée pour le moment, mais je suis preneuse d'explications pour m'améliorer. Filtrer ma table avec une condition where est ce à quoi j'ai pensé en premier lieu mais je ne sais pas faire le lien entre ce que l'utilisateur va demander et le where (cf mon message de 11:03).



> Question 3 :
Par ailleurs, je me demandais justement si je devais faire apparaître dans le MCD de ma base de données une table sous la forme de sous-table que j'ai mis dans la pièce jointe de mon premier message, ou si ce n'est pas la peine étant donné que c'est quelque chose que l'utilisateur va demander de voir.



Merci pour votre patience

Hors ligne

 

#20 Tue 08 March 2022 16:44

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Quand vous dites une application pour des agents de terrain, il s'agit de quoi concrètement ?

Hors ligne

 

#21 Tue 08 March 2022 17:02

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Il s'agit plutôt d'un outil de saisie de données et de visualisation mais je ne crois pas que je puisse en dire plus, désolée. Je dois d'abord faire une base de données postgre/sql. Là, en l'occurrence, j'aimerais qu'il soit possible de voir une sous-table pour chaque individu comme indiqué dans mon premier message.



> Peut-être en effet que comme le conseillait tumasgiu, il vaut mieux juste filtrer ma table avec une condition where, mais dans ce cas est-ce que c'est possible d'utiliser la forme suivante comme je l'ai indiqué précédemment :

create view ma_vue
as select *
from ma_table
where puce=numero_choisi_par_utilisateur

Dans ce cas, comment je fais le lien entre le choix de l'utilisateur et ma base de données (ma table originale en l'occurrence) ?



> Sinon, est-ce que je dois utiliser la forme suivante pour faire le lien base de données-utilisateur :

SELECT
   ' CREATE OR REPLACE VIEW vue_puce'||puce||' AS ( '
||' SELECT poids '
||' FROM total_obs_ve '
||' WHERE puce=\'|| puce::text||'\'')'
FROM
   total_obs_ve
GROUP BY
   puce
;

et si oui, comment faire ? (cf mon précédent message sur ce sur quoi je bloque).



Merci

Hors ligne

 

#22 Tue 08 March 2022 17:42

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: génération automatique de 439 tables

Je réponds à votre premiere question, même si au vu de votre scenario d'utilisation, créer des vues n'est pas nécessaire.

une fois envoyée la requête dans le shell postgres, celui-ci va vous afficher les résultats de la requête. En l'occurence,
la requête que vous envoyez renvoie des lignes à une colonne de chaine de caractères.
La métacommande \gexec fait exactement ce que vous vouliez faire avec votre histoire de bloc note : elle prends chaque
ligne de la requête que vous avez précédemment executé (ici des lignes contenant les requête de création de vue) et l'execute
comme si c'etait une requête postgresql.


Mais comme l'a fait remarqué Al3+, votre table principale suffit : votre application, une fois le numéro de puce selectionné
n'aura qu'a l'utiliser dans la clause where de votre requete.

Code:

SELECT * FROM total_obs_ve WHERE puce = numero_de_puce_selectionné.

Hors ligne

 

#23 Wed 09 March 2022 09:30

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Ok, mais je dois avouer que concrètement, je n'ai pas compris les étapes que je devais suivre dans le shell postgres pour afficher un résultat, et notamment à quel moment je dois rentrer le numéro de puce sur lequel je veux des renseignements.



Mais comme l'a fait remarqué Al3+, votre table principale suffit : votre application, une fois le numéro de puce selectionné
n'aura qu'a l'utiliser dans la clause where de votre requete.

Code:
SELECT * FROM total_obs_ve WHERE puce = numero_de_puce_selectionné.


Ce que je ne comprends pas dans ce cas-là c'est à quel moment on définit numero_de_puce_selectionne. Parce-que si je mets cette requête dans pgAdmin, il va forcément me dire que numero_de_puce_selectionne n'est pas défini ? En fait, j'ai du mal à voir comment va se concrétiser le lien base de données - utilisateur.

Hors ligne

 

#24 Wed 09 March 2022 09:43

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Bonjour,

vous mélangez tout, vous avez deux possibilités :
- n'avoir qu'une seule vue, et interroger celle-ci avec cette requête ci-dessous en fonction de la demande d'un utilisateur:
SELECT * FROM total_obs_ve WHERE puce = numero_de_puce_selectionné

- ou avoir vos 439 vues, mais là je reste aussi sceptique  sur cette solution, et vous utiliser la solution de tumasgiu

Malheureusement nous n'avons pas assez d'éléments pour bien vous aiguiller, il faudrait nous décrire votre architecture (la base postgres sera exploitée comment ?), bien définir votre besoin, et la solution que vous envisagez.

là on répond au coup par coup à vos questions, et cela vous embrouille plus qu'autre chose, je pense qu'il faut vraiment vous poser et nous expliquer votre problématique en répondant aux questions ci-dessus.

Hors ligne

 

#25 Wed 09 March 2022 13:42

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Bonjour,

J'ai bien compris qu'il y avait deux possibilités, ce que je ne comprends pas, c'est la manière dont l'utilisateur va pouvoir interagir avec la base de données, et donc, concernant la possibilité 1, la manière dont numero_de_puce_selectionne doit être ou va être défini dans la base de données, puisque comme je l'ai indiqué précédemment, si je rentre la requête :

SELECT * FROM total_obs_ve WHERE puce = numero_de_puce_selectionné

dans pgAdmin, je vais forcément avoir une erreur car numero_de_puce_selectionne n'est pas défini pour le moment. Est-ce que je fois créer une table ne contenant qu'un seul champ numero_de_puce_selectionne ? Est-ce que c'est l'utilisateur qui doit inscrire cette requête dans la base de données (ce qui me semble peu probable et surtout pas envisageable puisqu'elle s'adressera finalement sous forme d'outil de saisie à des personnes ne connaissant pas le langage Postgre/SQL).



Malheureusement nous n'avons pas assez d'éléments pour bien vous aiguiller, il faudrait nous décrire votre architecture (la base postgres sera exploitée comment ?), bien définir votre besoin, et la solution que vous envisagez.

là on répond au coup par coup à vos questions, et cela vous embrouille plus qu'autre chose, je pense qu'il faut vraiment vous poser et nous expliquer votre problématique en répondant aux questions ci-dessus.


J'ai bien conscience que je reste assez vague sur ma problématique générale et ses modalités, mais je suis actuellement en stage, et je ne veux pas prendre le risque de divulguer des informations confidentielles sur le lieu dans lequel j'effectue ce stage. Mon objectif général est de créer une base de données pour une espèce, puis un outil de saisie pour des agents de terrain mais aussi des personnes qui étudient cette espèce et qui appartiennent toutes à l'établissement dans lequel je travaille.

Des observations sont effectuées en milieu naturel sur cette espèce, et chaque observation est pour l'instant notifiée sur un fichier excel. Pour chaque observation, lorsque l'animal présente une puce, celle-ci est relevée, ainsi que d'autres informations dont notamment le poids et la date de capture, toutes compilées dans ce fichier Excel (1 ligne = 1 information). J'ai également d'autres couches shapefiles/données sous forme de tableur que je dois agencer pour réaliser une base de données mais dont il n'est pas question ici.

Comme je l'ai dit précédemment, j'aimerais simplement que tout utilisateur qui consultera l'outil de saisie de données que je vais créer puisse avoir accès aux informations concernant un individu pucé en cliquant (ou avec une autre manip) sur le numéro de puce de l'individu observé (qui se trouve dans le tableau compilant toutes les observations de terrain effectuées jusqu'alors, que je vais conserver dans ma base de données).

Autrement dit, j'aimerais qu'en disposant de la table originale présentée dans la pièce jointe de mon premier message, l'utilisateur puisse avoir accès à une sous-table (cf pièce jointe de mon premier message) relative à l'individu pucé en question, qui contient ses informations.


Il faut savoir je n'ai jamais été plus loin que la création d'une base de données Postgre/SQL dans le cadre de mes études (je n'ai jamais fait d'application attachée à une base de données) donc j'ai honnêtement beaucoup de mal à envisager la manière dont l'utilisateur pourra interroger cette dernière en passant par l'application. Par ailleurs, si vous avez de la biblio ou des liens explicatifs simples à ce propos je suis preneuse.

Dites-moi si vous avez besoin de savoir autre chose sans que je sois obligée d'en dire trop,

Merci.

Hors ligne

 

#26 Wed 09 March 2022 13:55

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

merci pour ce complément, on va y aller progressivement.

Comment vos utilisateurs vont interroger vos données ? vous parlez d'outil de saisie de données mais on ne sait pas de quoi il en retourne.
- ils ont un accès à PGADMIN ?
ou
- Une interface web carto est à créer ?
ou
- ils utilisent QGIS ?
ou autre ?

Hors ligne

 

#27 Wed 09 March 2022 14:16

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Super, merci à vous, les utilisateurs utiliseront une interface web carto (ce sera plus précisément un module d'une interface web carto déjà utilisée dans l'entreprise dans laquelle je suis)

Hors ligne

 

#28 Wed 09 March 2022 14:23

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

pouvez-vous nous préciser quelle est l'éditeur (Business Geografic, Arcgis, ...) et le nom de cette interface ?

Hors ligne

 

#29 Wed 09 March 2022 14:32

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

Re: génération automatique de 439 tables

Business geographic

Hors ligne

 

#30 Wed 09 March 2022 14:33

Franck2908
Participant actif
Date d'inscription: 5 Mar 2010
Messages: 84

Re: génération automatique de 439 tables

Donc vous utilisez le GEO Générateur pour concevoir une application ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB