SQLAlchemy 无效的外键与 PostgreSQL 但不是 SQLite

SQLAlchemy Invalid Foreign Key with PostgreSQL but not SQLite

我可以在 SQLite 数据库中创建以下 tables:

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)

class Paragraph(db.Model):
    article_id = db.Column(db.ForeignKey('article.id'), primary_key=True)
    index = db.Column(db.Integer, primary_key=True)

class Summary(db.Model):
    article_id = db.Column(db.ForeignKey('article.id'), primary_key=True)
    paragraph_index = db.Column(db.ForeignKey('paragraph.index'), primary_key=True)
    level = db.Column(db.Integer, primary_key=True)

但是,当我在 PostgreSQL 中创建相同的 tables 时,出现以下错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InvalidForeignKey) there is no unique constraint matching given keys for referenced table "paragraph"

删除 Summary.paragraph_index 允许我创建 table,所以看来问题出在这里。但是,列确实引用了一个主键,我觉得应该满足要求。

unique=True 添加到 Paragraph.index 还允许我创建 table。然后我可以使用 pgAdmin 删除唯一约束并让一切正常工作。然而,这似乎不妥。

我也试过:

为了回应 Adrian Klaver 的评论,对此我表示感谢,我使用 __table_args__Summary 指向 [=13] 上复合主键的两半=]:

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)

class Paragraph(db.Model):
    article_id = db.Column(db.ForeignKey('article.id'), primary_key=True)
    index = db.Column(db.Integer, primary_key=True)

class Summary(db.Model):
    article_id = db.Column(db.ForeignKey('article.id'), primary_key=True)
    paragraph_index = db.Column(db.Integer, primary_key=True)
    level = db.Column(db.Integer, primary_key=True)
    __table_args__ = (db.ForeignKeyConstraint(
        ['article_id', 'paragraph_index'],
        ['paragraph.article_id', 'paragraph.index']),)