【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_nametest=# 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 personmockarooで作成した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
);
コメント