From: | Rob Richardson <RDRichardson(at)rad-con(dot)com> |
---|---|
To: | Albe Laurenz <laurenz(dot)albe(at)wien(dot)gv(dot)at>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Update using non-existent fields does not throw an error |
Date: | 2015-03-16 16:28:32 |
Message-ID: | 67D108EDFAD3C148A593E6ED7DCB4BBD01153EF2DF@RADCONWIN2K8PDC.radcon.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Thanks very much. Now that you've explained it, it should have been obvious.
RobR
-----Original Message-----
From: Albe Laurenz [mailto:laurenz(dot)albe(at)wien(dot)gv(dot)at]
Sent: Monday, March 16, 2015 12:21 PM
To: Rob Richardson; pgsql-general(at)postgresql(dot)org
Subject: RE: Update using non-existent fields does not throw an error
Rob Richardson wrote:
> An update query is apparently succeeding, even though the query refers to fields that do not exist.
> Here’s the query:
>
> update inventory set
> x_coordinate = (select x_coordinate from bases where base = '101'),
> y_coordinate = (select y_coordinate from bases where base = '101')
> where charge = 100
>
> -- select x_coordinate, y_coordinate from bases where base = '101'
>
> When I run the update query, it tells me that the query succeeded and
> that four records were updated, which is what I expect. But when I
> looked at the inventory table, I found that the four records were
> unchanged. So, I tried to check the values of the base coordinates by
> running the select statement shown above. That statement threw an
> error complaining that x_coordinate and y_coordinate did not exist. This is correct; I should have been querying a view that includes those fields. But why didn’t the update statement throw an error?
That's an old one.
Since there is no "x_coordinate" in "bases", the column will refer to "x_coordinate" from the outer query. So you set "x_coordinate" and "y_coordinate" to their old values.
You can avoid problems like that by using column names that are qualified with the table name.
Yours,
Laurenz Albe
From | Date | Subject | |
---|---|---|---|
Next Message | Luca Ferrari | 2015-03-16 17:23:37 | Re: psql sqlstate return code access |
Previous Message | Albe Laurenz | 2015-03-16 16:20:40 | Re: Update using non-existent fields does not throw an error |