3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Postgresだとcreate tableと同時にindex作成ができなそう

Last updated at Posted at 2020-07-26

はじめに

MySQLならテーブル作成時にインデックスの作成も

create table staff(id int, name varchar(10), index id_index (id));

とかでできるが、postgresは?
と調べた時にできなそうということがわかったので書いておく

結論

できなそうだったので素直に

create table public.staff (id int, name varchar(10));
create index on staff(name);

というように2文に分けてやることにしている。

結論に至るまでにやったこと

軽くググる

調べてみると、少し古いが下記のstack overflowの記事でも、公式ドキュメントを引用しながら、create tableでインデックスで指定する方法はなさそうとの記載があった。
https://stackoverflow.com/questions/6239657/postgresql-can-you-create-an-index-in-the-create-table-definition/6239678

There doesn't seem to be any way of specifying an index in the CREATE TABLE syntax.

この記事が引用している公式ドキュメントも参照してみると、プライマリーキーのindexは自動で生成されるとのことが記載されていた。

PostgreSQL automatically creates an index for each unique constraint and primary key constraint to enforce uniqueness. Thus, it is not necessary to create an index explicitly for primary key columns.

ドキュメントをみる

11系を使っていたので、11系のドキュメントも確認してみたのですが、そこにも上で紹介した記事と同じことが書かれていた。
https://www.postgresql.org/docs/11/sql-createtable.html

DB Client Toolなどでも試してみる

ドキュメントの量が膨大だと「見落としている」という可能性もなくはないと思い、
既にindexが作成されているtableのDDLをSQLクライアントツール(今回使ったのはDBeaver)が生成するDDLを確認してみたりもした。

スクリーンショット 2020-07-26 16.56.19.png
上図では、email columnにindex貼ったテーブルのDDLを確認しているのだが、やはりcreate tableとは別でcreate indexされていることがわかる。

SQLクライアントツールのDDLも2文になってるので、できないという結論で問題なさそう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?