Модификатор типа не допускается для типа "геометрия" при обновлении БД с помощью postgis через geoalchemy2 & alembic

Мой скрипт обновления alembic для добавления новой точки геометрии postgis выглядит так:

from alembic import op
import sqlalchemy as sa
import geoalchemy2 as ga

def upgrade():
    op.add_column('stuff', sa.Column('my_location', ga.Geometry('POINT', management=True)))


def downgrade():
    pass

Когда я запускаю скрипт через

alembic upgrade head

возникает следующая ошибка

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) type modifier is not allowed for type "geometry"
LINE 1: ALTER TABLE events ADD COLUMN location geometry(POINT,-1)

Я использую postgres 9.1, postgis 1.5, sqlalchemy 1.0.9, geoalchemy2 0.2.6.

1 ответ

Вы используете Postgis 1.5, который не поддерживает модификатор типа для geometry тип.

Как решить проблему: Postgis 1.5 в настоящее время довольно старый, поэтому обновите его до Postgis 2.x

Если по той же причине вы не можете обновить установку Postgis, правильный способ добавить столбец геометрии - использовать функцию AddGeometryColumn(). Оператор SQL выглядит так:

SELECT AddGeometryColumn ('public','events','geom',0,'POINT',2);

где аргументы означают:

1) имя схемы, 2) имя таблицы, 3) имя столбца, 4) srid, 5) тип, 6) измерение.

Однако вы уже используете правильный флаг для добавления столбца геометрии в Postgis 1.5: management=True, В соответствии с документацией, это должно заставить SqlAlchemy использовать синтаксис AddGeometryColumn(). Может быть, ошибка исходит от Alembic, а не от GeoAlchemy?

Другие вопросы по тегам