Thread: DELETE FROM fails with error

DELETE FROM fails with error

From
chris Günther
Date:
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 |
+-----------------------------+


Re: DELETE FROM fails with error

From
"Josh Berkus"
Date:
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
 


Re: DELETE FROM fails with error

From
Tom Lane
Date:
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


Re: DELETE FROM fails with error

From
Stephan Szabo
Date:
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