Обсуждение: relation does not exist error
I'm evaluationg PostgreSQL 8.0 beta 5 for a new development project. I've created a user 'simon' and a database named 'WMSDV'. I've created some tables (see below) and assigned arwdRxt privledges to the 'simon' user. However, when i use psql, I am unable to select these tables. I receive a 'relation "'tabename' does not exist" error. I'm completely new to PostgreSQL, and this problem has me stumped. Can anyone point me in the right direction? Sw. WMSDV=# \dt List of relations Schema | Name | Type | Owner --------+-----------+-------+------- public | Customers | table | simon public | Persons | table | simon (2 rows) WMSDV=# select * from Customers; ERROR: relation "customers" does not exist WMSDV=# select * from public.Customers; ERROR: relation "public.customers" does not exist WMSDV=#
On Fri, Dec 03, 2004 at 11:01:16AM +0800, Simon Wittber wrote: > List of relations > Schema | Name | Type | Owner > --------+-----------+-------+------- > public | Customers | table | simon > public | Persons | table | simon > (2 rows) > > WMSDV=# select * from Customers; > ERROR: relation "customers" does not exist See the "Identifiers and Key Words" section in the "SQL Syntax" of the PostgreSQL documentation. Pay particular attention to what it says about case sensitivity, case folding, and quoting of identifiers. -- Michael Fuhr http://www.fuhr.org/~mfuhr/
Simon Wittber <simonwittber@gmail.com> writes: > WMSDV=# \dt > List of relations > Schema | Name | Type | Owner > --------+-----------+-------+------- > public | Customers | table | simon > public | Persons | table | simon > (2 rows) > > WMSDV=# select * from Customers; > ERROR: relation "customers" does not exist Identifiers get mashed to lower case unless you quote them: SELECT * FROM "Customers"; -Doug
Wow, 4 responses in 10 minutes to my newbie question. Thanks guys. I'm coming from a SQL Server background, so quoting table names didn't immediately spring to mind. I can see support will not be a problem. 10 out of 10. Sw.
The answer is in the question! It's the difference between Customers and customers. PostgreSQL folds identifiers to lower case if not double quoted. The best solution is to use lower case consistently. The alternative is to use double quotes consistently. Try SELECT * FROM "Customers"; and you will be happy again. Ian Harding Programmer/Analyst II Tacoma-Pierce County Health Department iharding@tpchd.org Phone: (253) 798-3549 Pager: (253) 754-0002 >>> Simon Wittber <simonwittber@gmail.com> 12/02/04 7:01 PM >>> I'm evaluationg PostgreSQL 8.0 beta 5 for a new development project. I've created a user 'simon' and a database named 'WMSDV'. I've created some tables (see below) and assigned arwdRxt privledges to the 'simon' user. However, when i use psql, I am unable to select these tables. I receive a 'relation "'tabename' does not exist" error. I'm completely new to PostgreSQL, and this problem has me stumped. Can anyone point me in the right direction? Sw. WMSDV=# \dt List of relations Schema | Name | Type | Owner --------+-----------+-------+------- public | Customers | table | simon public | Persons | table | simon (2 rows) WMSDV=# select * from Customers; ERROR: relation "customers" does not exist WMSDV=# select * from public.Customers; ERROR: relation "public.customers" does not exist WMSDV=# ---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend