Thread: creating "user" table

creating "user" table

From
Chris
Date:
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.


Re: creating "user" table

From
Vince Vielhaber
Date:
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
==========================================================================




Re: creating "user" table

From
Chris
Date:
> > 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.


Re: creating "user" table

From
Peter Eisentraut
Date:
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


Re: creating "user" table

From
Chris
Date:

> > 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.


Re: creating "user" table

From
Jochem van Dieten
Date:
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


Re: creating "user" table

From
merlyn@stonehenge.com (Randal L. Schwartz)
Date:
>>>>> "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!

Re: creating "user" table

From
Daniel ?erud
Date:
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
>



Re: creating "user" table

From
Chris
Date:
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/


Re: creating "user" table

From
Mike Mascari
Date:
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