【PostgreSQL】テーブルとレコードの作成

当ページのリンクには広告が含まれています。
  • URLをコピーしました!
目次

テーブル関連

テーブルの作成 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だと、シーケンスも表示されます。

シーケンスとは、連番となる一意な整数を生成するデータベースのオブジェクトです。
IDにプライマリーキーを指定したので生成されました。

テーブルだけを確認する場合には\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を利用して、データの追加を行います。

https://mockaroo.com/

  1. mockのperson.sqlを作成して/dbperson.sqlを移動
  2. 既存のpersonテーブルを削除
  3. `\i /var/lib/postgresql/data/person.sqlを実行

person

  • カラムの追加
  • FormatSQL
  • Table_nameperson

します。

PREVIEWを選択すると、生成されます。

先程作成したpersonテーブルを削除します。

DROP TABLE person

mockarooで作成したperson.sqldbに取り込みます。今回の環境だと
\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
);

テーブルにリレーションをはる

personcarとのリレーションをはります。

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
);
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次