cockroachdb / cockroachdb/sqlalchemy-cockroachdb

get_columns() does not reflect Identity columns

オープン
#297 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
156
フォーク
65
PR マージ指標
30日以内にマージされた PR はありません

説明

CockroachDB supports `GENERATED ALWAYS AS IDENTITY` columns, and `information_schema.columns` correctly reports `is_identity = 'YES'` and `identity_generation = 'ALWAYS'` for these columns.

However, the dialect's `get_columns()` does not include identity information in the returned column dict. It returns `default: nextval('..._seq')` but `identity` is absent from the result.

This causes Alembic autogenerate to emit a spurious `AlterColumnOp` on every run for any Identity column — it sees `Identity(always=True)` in the model but no Identity in the reflected column, and tries to add it.

## Reproduction

```python
from sqlalchemy import create_engine, inspect, text

engine = create_engine("cockroachdb://...")

# Create a table with an Identity column
with engine.begin() as conn:
conn.execute(text("CREATE TABLE IF NOT EXISTS identity_test (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY)"))

# Reflect it
inspector = inspect(engine)
cols = inspector.get_columns("identity_test")
for col in cols:
print(col)
# Expected: {..., 'identity': {'always': True, ...}, ...}
# Actual: {'name': 'id', 'type': INTEGER(), 'nullable': False, 'default': "nextval('public.identity_test_id_seq'::REGCLASS)", 'autoincrement': True, ...}
# 'identity' key is absent

# Cleanup
with engine.begin() as conn:
conn.execute(text("DROP TABLE IF EXISTS identity_test"))
```

**Expected:** The `identity` key should be populated when the column uses `GENERATED ALWAYS AS IDENTITY`.

**Actual:** The `identity` key is absent. The underlying sequence is reported as a plain `default`.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。