【PostgreSQL】テーブルとレコードの作成
当ページのリンクには広告が含まれています。
目次
テーブル関連
テーブルの作成 CREATE TABLE
CREATE TABLE table_name (
Column name + data type + constraints if any
)
https://www.postgresql.jp/document/9.4/html/datatype.html
CREATE TABLE person (
id int,
first_name VARCHAR(50),
last_name VARCHAR(50),
gender VARCHAR(7),
birth_day DATE );
テーブルの削除 DROP TABLE
DROP TABLE table_name
test=# DROP TABLE person;
DROP TABLE
テーブル作成時に制約をつける
このままのテーブルだと、カラムにデータが入力されていなくても作成できてしまうため制約をつけます。
CREATE TABLE person (
id BIGSERIAL NOT NULL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender VARCHAR(7) NOT NULL,
date_of_birth DATE NOT NULL,
email VARCHAR(150)
);
- BIGSERIAL : 整数を自動で決定します
- PRIMARY KEY : キーとして扱う
- NOT NULL : 空白を許可しない
テーブルの確認 \D
\d
テーブルの一覧を確認
test=# \d
List of relations
Schema | Name | Type | Owner
--------+---------------+----------+-------
public | person | table | admin
public | person_id_seq | sequence | admin
(2 rows)
\d
だと、シーケンスも表示されます。
テーブルだけを確認する場合には\dt
とします。
test=# \dt
List of relations
Schema | Name | Type | Owner
--------+--------+-------+-------
public | person | table | admin
テーブルの詳細を確認する場合にはtable_name
を指定します。
\d table_name
test=# \d person;
Table "public.person"
Column | Type | Collation | Nullable | Default
---------------+------------------------+-----------+----------+------------------------------------
id | bigint | | not null | nextval('person_id_seq'::regclass)
first_name | character varying(50) | | not null |
last_name | character varying(50) | | not null |
gender | character varying(7) | | not null |
date_of_birth | date | | not null |
email | character varying(150) | | |
Indexes:
"person_pkey" PRIMARY KEY, btree (id)
レコードの追加
レコードの追加 INSERT INTO
INSERT INTO table_name(column_name) VALUES(value)
INSERT INTO person(
first_name,
last_name,
gender,
date_of_birth )
VALUES('Anne', 'Smith', 'FEMALE', DATE '1988-01-09');
INSERT INTO person(
first_name,
last_name,
gender,
date_of_birth,
email )
VALUES('Jake', 'Jones', 'MALE', DATE '1990-01-10', 'jake@gmail.com');
select文で確認
test=# select * from person;
est=# select * from person;
id | first_name | last_name | gender | date_of_birth | email
----+------------+-----------+--------+---------------+----------------
1 | Anne | Smith | FEMALE | 1988-01-09 |
2 | Jake | Jones | MALE | 1990-01-10 | jake@gmail.com
(2 rows)
sqlファイルでまとめてデータを追加
Mockaroo
を利用して、データの追加を行います。
- mockのperson.sqlを作成して
/db
にperson.sql
を移動 - 既存の
person
テーブルを削除 - `\i /var/lib/postgresql/data/person.sqlを実行
person
- カラムの追加
Format
をSQL
にTable_name
をperson
に
します。
PREVIEW
を選択すると、生成されます。
先程作成したperson
テーブルを削除します。
DROP TABLE person
mockarooで作成したperson.sql
をdb
に取り込みます。今回の環境だと\i file_path
でい。
create table person (
id BIGSERIAL NOT NULL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender VARCHAR(7) NOT NULL,
email VARCHAR(50),
date_of_birth DATE NOT NULL,
country VARCHAR(50) NOT NULL
);
\i /var/lib/postgresql/data/person.sql
を実行します。
実行したら中身を確認してみましょう。
test=# select * from person limit 10;
id | first_name | last_name | gender | email | date_of_birth | country
----+------------+-----------+--------+---------------------------+---------------+-------------
1 | Tobi | Elward | Female | telward0@usatoday.com | 2021-12-22 | Brazil
2 | Ive | Cosgriff | Male | icosgriff1@gizmodo.com | 2021-06-06 | China
3 | Elli | Casley | Female | ecasley2@unesco.org | 2021-07-05 | Ukraine
4 | Abey | Billson | Male | abillson3@yellowpages.com | 2022-02-02 | China
5 | Glendon | Gawne | Male | ggawne4@fema.gov | 2022-02-20 | China
6 | Merla | Ateggart | Female | mateggart5@cbslocal.com | 2021-09-17 | Philippines
7 | Leonie | Raith | Female | lraith6@google.ca | 2022-04-21 | Portugal
8 | Roosevelt | Langlands | Male | rlanglands7@qq.com | 2021-10-09 | China
9 | Fiann | Dwelley | Female | fdwelley8@tinypic.com | 2022-01-14 | France
10 | Merwin | Wolfer | Male | mwolfer9@mapy.cz | 2021-05-05 | Sweden
(10 rows)
入ってますね!!
car
同様にcar
テーブルを作成します。
car.sql
を作成したら、同じ手順で取り込みます。
create table car (
id BIGSERIAL NOT NULL PRIMARY KEY,
make VARCHAR(50) NOT NULL,
model VARCHAR(50) NOT NULL,
price VARCHAR(50) NOT NULL
);
テーブルにリレーションをはる
person
にcar
とのリレーションをはります。
column_name BIGINT REFERENCES relation_table (relation_table_column),
UNIQUE(column_name)
create table person (
id BIGSERIAL NOT NULL PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender VARCHAR(7) NOT NULL,
email VARCHAR(50),
date_of_birth DATE NOT NULL,
country VARCHAR(50) NOT NULL
car_id BIGINT REFERENCES car (id), <-- Add
UNIQUE(car_id) <-- Add
);
コメント