Обсуждение: creating "user" table
Hi, This one is more for the developers, but other comments welcome. Since we can't create a table called user in a normal database due to the reserved keyword problem, would it be easy or worthwhile just having the CREATE USER information in the template1 database? Just a suggestion to fix the problem, it's just a really annoying problem :/ Chris.
On Sat, 22 Sep 2001, Chris wrote: > Hi, > > This one is more for the developers, but other comments welcome. > > Since we can't create a table called user in a normal database due to > the reserved keyword problem, would it be easy or worthwhile just having > the CREATE USER information in the template1 database? Uhhh, what "CREATE USER information"? Vince. -- ========================================================================== Vince Vielhaber -- KA8CSH email: vev@michvhf.com http://www.pop4.net 56K Nationwide Dialup from $16.00/mo at Pop4 Networking Online Campground Directory http://www.camping-usa.com Online Giftshop Superstore http://www.cloudninegifts.com ==========================================================================
> > Hi, > > > > This one is more for the developers, but other comments welcome. > > > > Since we can't create a table called user in a normal database due to > > the reserved keyword problem, would it be easy or worthwhile just having > > the CREATE USER information in the template1 database? > >Uhhh, what "CREATE USER information"? Sorry, thought I was clear. I meant only be able to create users when you're connected to the template1 db. so test=# create user x; wouldn't work, since you're not using template1. that way the user keyword would be free to use as a table name. Chris.
Chris writes: > I meant only be able to create users when you're connected to the template1 db. > > so > test=# create user x; > > wouldn't work, since you're not using template1. > > that way the user keyword would be free to use as a table name. But the parser is fixed at compile time and doesn't change depending on the database you're connected to. -- Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
> > I meant only be able to create users when you're connected to the > template1 db. > > > > so > > test=# create user x; > > > > wouldn't work, since you're not using template1. > > > > that way the user keyword would be free to use as a table name. > >But the parser is fixed at compile time and doesn't change depending on >the database you're connected to. Fair enough. There goes that idea then. Could the parser do a different regex for the word user depending on syntax? Just throwing around some (probably stupid) ideas, I have no idea on how difficult / worthwhile this would actually be. Chris.
Chris wrote: > > Could the parser do a different regex for the word user depending on > syntax? > > Just throwing around some (probably stupid) ideas, I have no idea on how > difficult / worthwhile this would actually be. Difficult? No idea. Worthwile? Not at all I think, since both SQL92 and SQL99 say that 'user' is a reserved word, so even if PostgreSQL coul allow the use of user it shouldn't ;) Jochem
>>>>> "Chris" == Chris <tomcat@weirdness.com> writes:
Chris> Hi,
Chris> This one is more for the developers, but other comments welcome.
Chris> Since we can't create a table called user in a normal database due to
Chris> the reserved keyword problem,
False precondition!
template1=# create database demo;
CREATE DATABASE
template1=# \c demo
You are now connected to database demo.
demo=# create table "user" (name text, age int);
CREATE
demo=# \d
List of relations
Name | Type | Owner
------+-------+--------
user | table | merlyn
(1 row)
demo=# \d user
Table "user"
Attribute | Type | Modifier
-----------+---------+----------
name | text |
age | integer |
demo=# insert into "user" values ('Randal', 39);
INSERT 1034607 1
demo=# insert into "user" values ('Russ', 38);
INSERT 1034608 1
demo=# insert into "user" values ('Ron', 35);
INSERT 1034609 1
demo=# select * from "user" order by age;
name | age
--------+-----
Ron | 35
Russ | 38
Randal | 39
(3 rows)
demo=#
You can quote any reserved word to get any name you want.
You just need to think of the table name of demo as _ "demo" _.
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
Thanks for the information !!
delyx.
Daniel Åkerud.
> >>>>> "Chris" == Chris <tomcat@weirdness.com> writes:
>
> Chris> Hi,
> Chris> This one is more for the developers, but other
comments welcome.
>
> Chris> Since we can't create a table called user in a
normal database due to
> Chris> the reserved keyword problem,
>
> False precondition!
>
> template1=# create database demo;
> CREATE DATABASE
> template1=# \c demo
> You are now connected to database demo.
> demo=# create table "user" (name text, age int);
> CREATE
> demo=# \d
> List of relations
> Name | Type | Owner
> ------+-------+--------
> user | table | merlyn
> (1 row)
>
> demo=# \d user
> Table "user"
> Attribute | Type | Modifier
> -----------+---------+----------
> name | text |
> age | integer |
>
> demo=# insert into "user" values ('Randal', 39);
> INSERT 1034607 1
> demo=# insert into "user" values ('Russ', 38);
> INSERT 1034608 1
> demo=# insert into "user" values ('Ron', 35);
> INSERT 1034609 1
> demo=# select * from "user" order by age;
> name | age
> --------+-----
> Ron | 35
> Russ | 38
> Randal | 39
> (3 rows)
>
> demo=#
>
> You can quote any reserved word to get any name you want.
> You just need to think of the table name of demo as
_ "demo" _.
>
> --
> Randal L. Schwartz - Stonehenge Consulting Services,
Inc. - +1 503 777 0095
> <merlyn@stonehenge.com>
<URL:http://www.stonehenge.com/merlyn/>
> Perl/Unix/security consulting, Technical writing, Comedy,
etc. etc.
> See PerlTraining.Stonehenge.com for onsite and open-
enrollment Perl training!
>
> ---------------------------(end of broadcast)-------------
--------------
> TIP 3: if posting/reading through Usenet, please send an
appropriate
> subscribe-nomail command to majordomo@postgresql.org so
that your
> message can get through to the mailing list cleanly
>
Hey,
> > Chris> Hi,
> > Chris> This one is more for the developers, but other
>comments welcome.
> >
> > Chris> Since we can't create a table called user in a
>normal database due to
> > Chris> the reserved keyword problem,
> >
> > False precondition!
> >
> > template1=# create database demo;
> > CREATE DATABASE
> > template1=# \c demo
> > You are now connected to database demo.
> > demo=# create table "user" (name text, age int);
> > CREATE
> > demo=# \d
> > List of relations
> > Name | Type | Owner
> > ------+-------+--------
> > user | table | merlyn
> > (1 row)
> >
> > demo=# \d user
> > Table "user"
> > Attribute | Type | Modifier
> > -----------+---------+----------
> > name | text |
> > age | integer |
> >
> > demo=# insert into "user" values ('Randal', 39);
> > INSERT 1034607 1
> > demo=# insert into "user" values ('Russ', 38);
> > INSERT 1034608 1
> > demo=# insert into "user" values ('Ron', 35);
> > INSERT 1034609 1
> > demo=# select * from "user" order by age;
> > name | age
> > --------+-----
> > Ron | 35
> > Russ | 38
> > Randal | 39
> > (3 rows)
> >
> > demo=#
> >
> > You can quote any reserved word to get any name you want.
> > You just need to think of the table name of demo as
>_ "demo" _.
> >
True, didn't give that example, but.. try that in another DBMS :) I know
(at least) MySQL won't let you do that (*waits for the obvious comment*),
don't know about other DBMS needing quotes around the name, but I don't
think that one is portable to other systems :/
As Jochem pointed out in another post, by definition it's a reserved word
(both sql92 & 99) so I'll go back to my corner again :)
-----------------
Chris Smith
http://www.squiz.net/
Chris wrote:
>
> Hey,
...
>
> > > False precondition!
> > >
> > > template1=# create database demo;
> > > CREATE DATABASE
> > > template1=# \c demo
> > > You are now connected to database demo.
> > > demo=# create table "user" (name text, age int);
...
>
> True, didn't give that example, but.. try that in another DBMS :) I know
> (at least) MySQL won't let you do that (*waits for the obvious comment*),
> don't know about other DBMS needing quotes around the name, but I don't
> think that one is portable to other systems :/
Its at least portable to Oracle, which behaves the same way as
PostgreSQL, BTW:
Connected to:
Oracle8 Enterprise Edition Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production
SQL> CREATE TABLE USER (key INTEGER);
CREATE TABLE USER (key INTEGER)
*
ERROR at line 1:
ORA-00903: invalid table name
SQL> CREATE TABLE "user" (key INTEGER);
Table created.
>
> As Jochem pointed out in another post, by definition it's a reserved word
> (both sql92 & 99) so I'll go back to my corner again :)
Mike Mascari
mascarm@mascari.com