2014-08-28 5 views
3

저는 Postgres에서 데이터베이스와 스키마를 만들었습니다. 나는 내 모델을 가지고 Flask-Migrate를 사용하는 python manager.py db migrate을 실행할 때 아래 오류가 발생합니다. 그러나 db init 명령이 작동합니다. 내 모델 __tablename____table_args__ = {"schema": "name_of_schema"}를 추가 할 때PostgreSQL 스키마와 잘못된 일대 다 관계로 인한 일괄 이전 문제

sqlalchemy.exc.ProgrammingError: (ProgrammingError) no schema has been selected to create in 

지금, 나는 오류 모두 아래 얻을, db initdb migrate :

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'deploy.instance_id' could not find table 'instance' with which to generate a foreign key to target column 'id' 

나의 관계는 그러나, 괜찮아 보여. 많은 예제를 보았지만 Flask-Migrate가 없어도 SQLite에서 제대로 작동했습니다.

class Application(db.Model): 
    __tablename__ = 'application' 
    __table_args__ = {"schema":"v1"} 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(80), unique=False) 
    instances = db.relationship('Instance', backref='application', lazy='dynamic') 

    def __repr__(self): 
     return '<ID %r>' % (self.id) 


class Instance(db.Model): 
    __tablename__ = 'instance' 
    __table_args__ = {"schema":"v1"} 
    id = db.Column(db.Integer, primary_key=True) 
    host = db.Column(db.String(80), unique=False) 
    application_id = db.Column(db.Integer, db.ForeignKey('application.id')) 
    deploys = db.relationship('Deploy', backref='instance', lazy='dynamic') 

    def __repr__(self): 
     return '<ID %r>' % (self.id) 


class Deploy(db.Model): 
    __tablename__ = 'deploy' 
    __table_args__ = {"schema":"v1"} 
    id = db.Column(db.Integer, primary_key=True) 
    tag = db.Column(db.String(80), unique=False) 
    instance_id = db.Column(db.Integer, db.ForeignKey('instance.id')) 

    def __repr__(self): 
     return '<ID %r>' % (self.id) 

관계는 다음과 같습니다 : (대부분의 열을 제거)는 다음과 같이

나는 세 개의 테이블이

  • 응용 프로그램 인스턴스에 (일대 다, 하나의 응용 프로그램 많은 경우)
  • (하나 개의 인스턴스가 여러 전개함에 일대)

I를

  • 인스턴스 배포하는 모든 관계를 제거하고 독립 실행 형 테이블을 만들면 여전히 첫 번째 오류가 발생합니다 : sqlalchemy.exc.ProgrammingError: (ProgrammingError) no schema has been selected to create in. 문제점은 무엇이며 어떻게 해결할 수 있습니까?

  • 답변

    6

    PostgreSQL에는 "기본 스키마"라는 개념이 있으며 SEARCH_PATH를 사용하여 설정됩니다. 연결되어있는 사용자가이 구성이없는 것처럼 들립니다. Postgresql 웹 사이트의 Client Connection Defaults을보십시오. 당신이 Table에 명시 적 schema 인수를 사용할 때 외래 키 오류

    는, 그 이름도 ForeignKey 객체에 지정해야합니다 : 내가하지 스키마를 지정 누락 된 무엇

    ForeignKey('myschema.mytable.id') 
    
    +0

    ForeignKey. 고맙습니다! – darksky