Skip to content

Commit

Permalink
Update 20241113a_PostgreSQLで連番を自動生成してくれるIDENTITY列.md
Browse files Browse the repository at this point in the history
  • Loading branch information
ma91n authored Nov 13, 2024
1 parent 9d77ed2 commit 28fe7d9
Showing 1 changed file with 11 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ Technology Innovation Group真野です。

なお、調査に用いたPostgreSQLバージョンは `17.0` です。

**2024/11/13 追記しました:**

- 「作成されたシーケンスの名称」章のシーケンス名取得の方法を追記
- 「シーケンス名の上限63文字を超過したテーブル、カラム名の場合」章を追加
- 「テーブル名を変更した時シーケンス名はどうなるか」章を追加
- 「カラム名をを変更した時シーケンス名はどうなるか」章を追加
- 「独自に作成したシーケンスとの紐づけ方法」を追加

## 記事のサマリ

- 新規構築なら連番の自動採番はSERIAL/BIGSERIALの代わりに `GENERATED ALWAYS AS IDENTITY` の利用がベター
Expand Down Expand Up @@ -126,7 +134,7 @@ CREATE TABLE color (
);
```

color_idに3を指定してインターとしようとするとエラーが出て止められます
color_idに3を指定してインサートとしようとするとエラーが出て止められます

```sql
postgres=# INSERT INTO color (color_id, color_name) VALUES (3, 'Blue');
Expand Down Expand Up @@ -531,7 +539,7 @@ CREATE TABLE color (
);
```

### 10. 文字列型とGENERATED BY DEFAULT AS IDENTITYの組み合わせ
### 10. 文字列型とGENERATED AS IDENTITYの組み合わせ

文字列型(text型)にGENERATED ALWAYS AS IDENTITYを指定すると、いい感じの型変換により '1'、'2'、...といった採番がされないかと思いついたので試しました。

Expand All @@ -545,7 +553,7 @@ ERROR: identity column type must be smallint, integer, or bigint

無事エラーで、これは対応していないようです。型としては、`smallint` `integer` `bigint` のみ対応。

### 11. SERIAL型とGENERATED BY DEFAULT AS IDENTITYの組み合わせ
### 11. SERIAL型とGENERATED AS IDENTITYの組み合わせ

SERIAL型であれば、型としては `integer` 型なので、いけるのではと一応チャレンジしました。結果は以下のエラーです。

Expand Down

0 comments on commit 28fe7d9

Please sign in to comment.