Модификатор типа не допускается для типа "геометрия" при обновлении БД с помощью 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?