On 9/22/15 7:24 PM, Mike Bayer wrote:


On 9/22/15 6:49 PM, Sergi Pons Freixes wrote:
2015-09-22 15:06 GMT-07:00 Mike Bayer <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com>>:

    OK, the only possible way this would happen is if "SELECT
    current_schema()" were returning the name "notifications", and I
    went back through our emails and found:

    The output of the script is:
    $ python inspector_test.py
    default schema: notifications
    schema names: ['information_schema', 'notifications', 'public']
    dflt table names: ['alembic_version', 't1', 't2']
    notifications table names: ['alembic_version', 't1', 't2']

    that is the issue.  If your search_path is set to only "public",
    then current_schema should *NOT* be reading "notifications"; per
    the docs
    (http://www.postgresql.org/docs/9.2/static/functions-info.html):

    |current_schema| returns the name of the schema that is first in
    the search path (or a null value if the search path is empty).
    This is the schema that will be used for any tables or other
    named objects that are created without specifying a target schema.

    So, is the username here the name "notifications"? since this
    $user default is finding its way in there.

    I would do this when you connect:

    with engine.connect() as conn:
        conn.execute("SET search_path='public'")


Yes, notifications is the name of the user AND the schema... not a recommended practice I guess?

I set manually the search_path to only public as suggested, and prints before and after show it during the revision:
...
INFO  [sqlalchemy.engine.base.Engine] show search_path
INFO  [sqlalchemy.engine.base.Engine] {}
('"$user",public',)
INFO  [sqlalchemy.engine.base.Engine] SET search_path='public'
INFO  [sqlalchemy.engine.base.Engine] {}
INFO  [sqlalchemy.engine.base.Engine] show search_path
INFO  [sqlalchemy.engine.base.Engine] {}
('public',)
...

Revision runs fine, but now when I run the upgrade it does not find the alembic_version table (attached logs)... I suspect that the search_path is restored so that it takes notifications again by default?

yes

well, to clarify, alembic_version is created in that same connection scope, so as long as the search path was set for every run it should be in "public".




Would this issue be solved just by $user!=$schema, or is there something else behind (as you were saying, not even $user should be on the search path)?

yes that would also solve it.


the issue is that PG doesn't give us the schema name of a foreign key when that schema is in the search path. that's what the whole explanation at http://docs.sqlalchemy.org/en/rel_1_0/dialects/postgresql.html#remote-schema-table-introspection-and-postgresql-search-path is about.




--
You received this message because you are subscribed to the Google Groups "sqlalchemy-alembic" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy-alembic+unsubscr...@googlegroups.com <mailto:sqlalchemy-alembic+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "sqlalchemy-alembic" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy-alembic+unsubscr...@googlegroups.com <mailto:sqlalchemy-alembic+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy-alembic" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy-alembic+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to