On 06/09/2014 03:30 PM, Michael Bayer wrote:
On Jun 9, 2014, at 4:32 PM, AM <[email protected]> wrote:

Hi all.

In my app I have a bootstrap method that calls:

metadata.create_all(checkfirst)

against a postgres RDS instance.

The tables already exist however the query emitted seems to be:

CREATE TABLE user_roles (
        user_id INTEGER NOT NULL,
        role_id INTEGER NOT NULL,
        PRIMARY KEY (user_id, role_id),
        FOREIGN KEY(user_id) REFERENCES "user" (id),
        FOREIGN KEY(role_id) REFERENCES role (id)
)

Per my understanding this query should not even be emitted or if it is there 
should be a 'IF NOT EXISTS' somewhere in there.

I was wondering if someone could point out what I am doing wrong?
it doesn't use "IF NOT EXISTS".  it runs a query against pg_namespace.  Turn on 
echo=True on your engine and you'll see something like:

select relname from pg_class c join pg_namespace n on n.oid=c.relnamespace 
where n.nspname=current_schema() and relname=%(name)s
{'name': u'a'}

CREATE TABLE a (
        id SERIAL NOT NULL,
        PRIMARY KEY (id)
)

if this query isn't succeeding, perhaps you have a schema mismatch of some 
kind.  if the CREATE TABLE does succeed then the default schema is probably not 
what you expect.


So I do get the pg_namespace query with one row in the result. What I am a it confused about is why the CREATE is emitted since the table exists?

Thanks.
AM

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to