こんにちは、さるまりんです。
DBテーブルの主キーとしてシーケンス(serial
)をよく使います。
が、PostgreSQLではUUIDを使うこともできます。
テーブルのCREATE文はこんな感じです。
CREATE TABLE composers (
id uuid DEFAULT uuid_generate_v4(),
name varchar(200) not null
);
実行してみます。
salumarine=# CREATE TABLE composers (
salumarine(# id uuid DEFAULT uuid_generate_v4(),
salumarine(# name varchar(200) not null
salumarine(# );
ERROR: function uuid_generate_v4() does not exist
LINE 2: id uuid DEFAULT uuid_generate_v4(),
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
おっとエラーです。
これが出たら
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
を実行します。
salumarine=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION
で、もう一度CREATE TABLE
です。
salumarine=# CREATE TABLE composers (
salumarine(# id uuid DEFAULT uuid_generate_v4(),
salumarine(# name varchar(200) not null
salumarine(# );
CREATE TABLE
今度は大丈夫でした。
データを入れてみます。
insert into composers (name)
values ('Beethoven'),
('Bach'),
('Brahms'),
('Mozart'),
('Ravel'),
('Stravinsky');
実行してみます。
salumarine=# insert into composers (name)
salumarine-# values ('Beethoven'),
salumarine-# ('Bach'),
salumarine-# ('Brahms'),
salumarine-# ('Mozart'),
salumarine-# ('Ravel'),
salumarine-# ('Stravinsky');
INSERT 0 6
取り出してみます。
salumarine=# select * from composers;
id | name
--------------------------------------+------------
d58e6ee7-49db-4c76-aaf3-bf8596a5fd10 | Beethoven
5b20b254-ae55-4513-8876-ce536014c88c | Bach
aa5aa08c-ce3a-4337-ae2e-c6f96e65f5b9 | Brahms
5bbfb696-77f9-4e75-a150-fee7fd2113c0 | Mozart
da9ffa85-0e41-416d-a6f7-97bacc0977cf | Ravel
174b394a-cba7-4f35-986f-33b2af717c98 | Stravinsky
(6 rows)
UUIDが自動生成されて登録されています。
これで数値ではなく、UUIDで主キーを作ることもできます。
場面に応じで利用できるといいですね。
読んでくださってありがとうございました。
それではまた!