Bonjour à tous,

Je rencontre quelques petits soucis dans mon développement, et je sollicite donc votre aide

Afin d'optimiser les performances, je suis amené à utiliser une table temporaires pour stocker le résultats d'une requête pouvant être complexe, sur une table comportant un très grand nombre d’occurrences.
Cependant, j'ai également besoin de savoir le nombre d’occurrences qui sont ajoutées dans ma table temporaire.

Je travaille avec JDBC sous Java, et PostgreSQL.

Ma création de table se fait donc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
CREATE TEMPORARY TABLE temp_table
AS
SELECT * ....
Jusque-là, pas de soucis. En revanche, je bloque sur une solution me permettant de récupérer le nombre d’occurrences ajoutées.
En deux requêtes, je ferais simplement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 SELECT COUNT(*) FROM temp_table
Cependant, là encore pour des soucis de performances, je suis contraint de tout traiter en une seule requête.
Ma requête doit donc: créer ma table temporaire en fonction d'une requête plus complexe ET me renvoyer le nombre d’occurrences ajoutées dans ma temp_table.

J'ai donc envisagé de faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
CREATE TEMPORARY TABLE temp_table
AS
SELECT *, COUNT(*) FROM ... WHERE ... GROUP BY ...
Mais le souci, c'est que je vais sûrement devoir appliquer mon GROUP BY sur l'ID de ma table. Et le souci est donc qu'au lieu de retourner le nombre total de lignes de ma table, eh bien je récupère '1' (logique !).

Avez vous une astuce à me proposer ?


La partie en bleu est résolue

J'ai une deuxième question, portant cette fois sur la notion de 'session sql'.
Dans la documentation de PostgreSQL, on peut lire qu'une table temporaire existera uniquement le temps d'une session SQL.
Comment se délimite une session ? C'est la période entre la connexion au serveur et la déconnexion ?

Et niveau multi-utilisateurs, que se passerait-il si:
- Un utilisateur U1 exécute une première requête créant ma table temp_table.
- Un autre utilisateur U2 exécute une requête différentes créant elle aussi la même table temp_table.

- Si mon utilisateur U1 interroge alors temp_table, que récupérerait-il ? les données de la requête qu'il a exécutée ? Ou les données de la requête de U2 ?

J'ai besoin de voir temp_table comme une table unique pour chaque utilisateur. U1 ne pourra récupérer que les résultats de SA requête, U2 idem etc.

Merci d'avance de votre aide