Postgres n'accepte pas les alias de table avant le nom de la colonne
j'utilise un framework (Jodd) qui ajoute l'alias table aux noms de colonnes dans un Select SQL. Ça ressemble à de la SQL bien formée, mais Postgres s'y étouffe.
update GREETING Greeting
set Greeting.ID=5,
Greeting.NAME='World',
Greeting.PHRASE='Hello World!'
where (Greeting.ID=5)
donne une erreur:
Error: ERROR: column "greeting" of relation "greeting" does not exist
SQLState: 42703
y a-t-il un moyen de faire accepter ce SQL par Postgres? Mon autre alternative est de pirater le cadre, je ne veux pas faire.
3 réponses
Le problème est que vous incluez l'alias de la table SET
l'article, dans les colonnes. Consultez la documentation de UPDATE
dans Postgres docs:
column
Le nom d'une colonne dans
table
. Le nom de la colonne peut être qualifié avec un nom de sous-zone ou un indice de tableau, si nécessaire. Ne pas inclure le nom de la table dans la spécification d'une colonne cible - par exemple,UPDATE tab SET tab.col = 1
est invalide.
Ceci est valable dans Postgres:
update GREETING Greeting
set
NAME='World',
PHRASE='Hello World!'
where Greeting.ID=5 ;
essayez d'utiliser le dernier Jodd, v3.3.7. où cette question est réglée.
le problème était dans la bibliothèque Jodd: les méthodes de mise à jour de l'entité généraient l'état de mise à jour avec les alias de table. La nouvelle version ne met tout simplement pas d'alias de table; cela fonctionne pour Postgres et pour d'autres bases de données aussi.
vérifier la documentation sur UPDATE
déclaration, spécifiquement pour le colonne part: il est illégal de préfixer des colonnes avec l'alias de table dans le SET
l'article.
UPDATE GREETING Greeting
SET ID=5, NAME='World', PHRASE='Hello World!'
WHERE (Greeting.ID=5);