Thread: finding my schema (for sequences)

finding my schema (for sequences)

From
"Lee Harr"
Date:
I am used to creating sequences separately and using them for default
values instead of using the serial type. I am not sure why... but that's the
way I have been doing it. Maybe I don't trust the generated names.
I should probably just get over it, but anyhow...

Let's say I am writing a file for creating a database. Say ...

-- schematest
CREATE SEQUENCE foo_id_seq;
CREATE TABLE foo(
    id integer
        PRIMARY KEY
        DEFAULT nextval('foo_id_seq'),
    xx text
);


I want to be able to ...

lee=# drop schema beta cascade;
DROP SCHEMA
lee=# create schema beta;
CREATE SCHEMA
lee=# set search_path to beta;
SET
lee=# \i schematest
CREATE SEQUENCE
CREATE TABLE


The problem is that unlike a comparable serial column, my default value
does not qualify the sequence with the right schema name.

Is there a way to do that, such that my schematest file does not need to
know which schema I am loading the file into?

Or should I just get over my aversion to serial?

_________________________________________________________________
Working moms: Find helpful tips here on managing kids, home, work �  and
yourself.   http://special.msn.com/msnbc/workingmom.armx


Re: finding my schema (for sequences)

From
"Lee Harr"
Date:
>Let's say I am writing a file for creating a database. Say ...
>
>-- schematest
>CREATE SEQUENCE foo_id_seq;
>CREATE TABLE foo(
>     id integer
>         PRIMARY KEY
>         DEFAULT nextval('foo_id_seq'),
>     xx text
>);
>
>
>I want to be able to ...
>
>lee=# drop schema beta cascade;
>DROP SCHEMA
>lee=# create schema beta;
>CREATE SCHEMA
>lee=# set search_path to beta;
>SET
>lee=# \i schematest
>CREATE SEQUENCE
>CREATE TABLE
>


Hmm. Just in case it is not clear why I want to do this ... after the
above, if I reconnect and fail to set my search_path, the DEFAULT
fails ...

lee=# insert into beta.foo (xx) values ('one');
ERROR:  relation "foo_id_seq" does not exist



I Found the current_schema() function, but my naive attempt ...

CREATE SEQUENCE foo_id_seq;
CREATE TABLE foo(
    id integer
        PRIMARY KEY
        DEFAULT nextval(current_schema()||'.foo_id_seq'),
    xx text
);


creates a DEFAULT that looks up the current_schema() at run time
instead of when creating the table. Any hints?

_________________________________________________________________
MSN 8 with e-mail virus protection service: 2 months FREE*
http://join.msn.com/?page=features/virus