PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Général » Perte de donnée après exécution d'une requête invalide » 26/01/2022 18:15:19

lutin11
Réponses : 1

Bonjour,
j'ai une table

lutin11 a écrit :

\d ps_to_remove
                      Table « pg_temp_3.ps_to_remove »
Colonne |          Type                   | Collationnement | NULL-able | Par défaut
    ---------+-----------------------------+----------------------+---------------+------------
   ps_id   | character varying(255) |                          |                   |
  ps_gs   | character varying(255) |                          |                   |

créée comme ceci

lutin11 a écrit :

CREATE TEMPORARY TABLE ps_to_remove AS (
  SELECT ps.topiaid ps_id, gs.topiaid ps_gs
  FROM practicedsystem ps
  INNER JOIN growingsystem gs ON ps.growingsystem = gs.topiaid
  INNER JOIN growingplan gp ON gp.topiaid = gs.growingplan
  INNER JOIN domain d ON d.topiaid = gp.domain
  LEFT JOIN plot p ON p.growingsystem = gs.topiaid
  LEFT JOIN zone z ON z.plot = p.topiaid
  WHERE d.campaign < 2000 OR d.campaign >= 2025
  AND d.active IS false
  AND ps.active IS false
  GROUP BY ps_id, ps_gs
);

Le requête suivante reourne une erreur:


lutin11 a écrit :

SELECT growingsystem FROM ps_to_remove;
ERROR:  column "growingsystem" does not exist
LIGNE 1 : SELECT growingsystem FROM ps_to_remove;

Normal la colonne 'growingsystem' n'existe pas mais alors pourquoi celle-ci fonctionne ?

lutin11 a écrit :

inra-agrosyst-latest=# SELECT COUNT(*) FROM growingsystem_networks WHERE growingsystem IN (SELECT growingsystem FROM ps_to_remove);
count
-------
29365
(1 ligne)

La bonne requête devrait être:

lutin11 a écrit :

inra-agrosyst-latest=# SELECT COUNT(*) FROM growingsystem_networks WHERE growingsystem IN (SELECT ps_gs FROM ps_to_remove);
count
-------
     7
(1 ligne)

Ça m'a posé un gros problème car

lutin11 a écrit :

DELETE FROM growingsystem_networks WHERE growingsystem IN (
  SELECT growingsystem FROM ps_to_remove
);

vide entièrement la table growingsystem_networks !

Quelqu'un pourrait-il m'expliquer la raison d'un tel fonctionnement ?
Merci

Pied de page des forums

Propulsé par FluxBB