Обсуждение: DELETE FROM fails with error
Hi folks, I have the problem that I can't delete datasets out of my tables. It's like that: I have a table: tblshop ID_Shop oid with sequence-------Sh_NameID_Country... there is an index on ID_Country I have a second table: tblcountryID_Country oid with sequence----------C_Name... I have a reference between these two tables pointing from tblshop.ID_Country to tblcountry.ID_Country When I try to delete a row from tblshop I get the error that postgres can't find the attribute id_shop. My SQL-command looks like follows: DELETE FROM tblshop WHERE tblshop."ID_Shop" = 12 the same happens when I try to do: DELETE FROM tblshop WHERE tblshop."ID_Country" = 3 I also tried this query without quotes, with simple quotes (') without the leading tablename and so on, but I always get the error-message: ERROR: Attribute 'id_shop' not found Please, can anyone help me out? It is really anoying when you can't delete datasets especially because my application is already online (I use postgres with PHP) and there are 20 tables with alltogether 120 MB of data in it chris -- +-----------------------------+ | chris | | Database Developer | | uscreen GmbH | | | | --------------------------- | | eMail guenther@uscreen.de | | Fon (02 02) 24 49 88 - 23 | +-----------------------------+
Chris, > I have a reference between these two tables pointing from > tblshop.ID_Country to > tblcountry.ID_Country > > When I try to delete a row from tblshop I get the error that postgres > can't find > the attribute id_shop. My SQL-command looks like follows: > > DELETE FROM tblshop WHERE tblshop."ID_Shop" = 12 > > the same happens when I try to do: > > DELETE FROM tblshop WHERE tblshop."ID_Country" = 3 > > I also tried this query without quotes, with simple quotes (') > without the leading > tablename and so on, but I always get the error-message: Two possibilities: 1. You're using a couple of different cases in the above example. PostgreSQL is case-sensitive. What interface program are you using? What OS? From the error messages, it looks like your commands are being lower-cased by the interface or data transport, which would cause Postgres not to recognize the field names.a. Try you commands from PSQL on the Database server, making sure that your case is the same as the table definition.b. If you can down the DB for an hour, try re-naming one of the ID fields in lower case (one that isn't foriegn keyed, of course). 2. It's possible that defining these rows as type OID requires some special reference syntax. If so, hopefully someone on the list will come forward. -Josh Berkus ______AGLIO DATABASE SOLUTIONS___________________________ Josh Berkus Complete informationtechnology josh@agliodbs.com and data management solutions (415) 565-7293 for law firms, small businesses fax 621-2533 and non-profit organizations. San Francisco
chris G�nther <guenther@uscreen.de> writes: > When I try to delete a row from tblshop I get the error that postgres > can't find the attribute id_shop. My SQL-command looks like follows: > DELETE FROM tblshop WHERE tblshop."ID_Shop" = 12 That looks like the correct way of quoting a mixed-case field name. I think the field is not named quite like you think it is. Try doing pg_dump -s -t tblshop databasename to see what the field names really are. regards, tom lane
I was going to guess that it was something related to the foreign key, but I can't imagine why that would be affected by a delete on the referencing table (there shouldn't be a trigger there anyway). Can you send full schema with constraints for the tables? On Wed, 28 Mar 2001, chris G�nther wrote: > Hi folks, > > I have the problem that I can't delete datasets out of my tables. It's like that: > I have a table: > tblshop > ID_Shop oid with sequence > ------- > Sh_Name > ID_Country > ... > > there is an index on ID_Country > > > I have a second table: > tblcountry > ID_Country oid with sequence > ---------- > C_Name > ... > > I have a reference between these two tables pointing from tblshop.ID_Country to > tblcountry.ID_Country > > When I try to delete a row from tblshop I get the error that postgres can't find > the attribute id_shop. My SQL-command looks like follows: > > DELETE FROM tblshop WHERE tblshop."ID_Shop" = 12 > > the same happens when I try to do: > > DELETE FROM tblshop WHERE tblshop."ID_Country" = 3 > > I also tried this query without quotes, with simple quotes (') without the leading > tablename and so on, but I always get the error-message: > > ERROR: Attribute 'id_shop' not found > > Please, can anyone help me out? It is really anoying when you can't delete datasets > especially because my application is already online (I use postgres with PHP) and > there are 20 tables with alltogether 120 MB of data in it