PostgreSQL テーブルを作成しデータをコピー(CTAS他)

テーブルを作成しデータもコピーするサンプルです。

目次

サンプル 元のテーブルとデータを作成(create tableとinsert)
  create table as select(CTAS)でテーブルを作成しデータもコピーする
  select into fromでテーブルを作成しコピーする
  テーブル定義を作成してinsert selectでコピーする

最初に元になるテーブルを作成します。

元のテーブルとデータを作成(create tableとinsert)

create tableでデータを作成しinsertでデータを登録します。

 

create tableでテーブルを作成します。

CREATE TABLE IF NOT EXISTS employee(
	id INT,
	name VARCHAR(20) not null,
	romaji VARCHAR(20),
	created_at TIMESTAMP,
	updated_at TIMESTAMP,
	primary key(id)
);

7行目は、idをPrimary keyとして指定しています。

 

create table文を確認するとテーブル定義は以下のようになります。

CREATE TABLE IF NOT EXISTS public.employee
(
    id integer NOT NULL,
    name character varying(20) COLLATE pg_catalog."default" NOT NULL,
    romaji character varying(20) COLLATE pg_catalog."default",
    created_at timestamp without time zone,
    updated_at timestamp without time zone,
    CONSTRAINT employee_pkey PRIMARY KEY (id)
)

 

Insert文でデータを登録する

INSERT INTO employee VALUES (1,'鈴木','suzuki','2022/01/21 12:16:05.337','2022/01/21 12:16:05.337');
INSERT INTO employee VALUES (2,'田中','tanaka','2022/01/21 12:16:05.337','2022/01/21 12:16:05.337');
INSERT INTO employee VALUES (3,'佐藤','sato','2022/01/21 12:16:05.337','2022/01/21 12:16:05.337');

 

create table as select(CTAS)でテーブルを作成しデータもコピーする

create table as selectは、先頭の文字を取ってCTASとも呼ばれます。

CTASは、テーブルとデータをコピーできます。

create table employee2 
AS SELECT * FROM employee;

 

create table文を確認するとテーブル定義は以下のようになります。

CREATE TABLE IF NOT EXISTS public.employee2
(
    id integer,
    name character varying(20) COLLATE pg_catalog."default",
    romaji character varying(20) COLLATE pg_catalog."default",
    created_at timestamp without time zone,
    updated_at timestamp without time zone
)

employeeテーブルには存在したprimary keyやnot nullはemployee2テーブルにはついていません。

employeeテーブルのデータはemployee2テーブルにコピーされます。

後からalter tableでidをprimary keyにすることはできます。

ALTER TABLE employee2 ADD PRIMARY KEY(id)

 

select into fromでテーブルを作成しコピーする

select into fromもCTASは、テーブルとデータをコピーできます。

select * into employee3 from employee

 

create table文を確認するととテーブル定義は以下のようになります。

CREATE TABLE IF NOT EXISTS public.employee3
(
    id integer,
    name character varying(20) COLLATE pg_catalog."default",
    romaji character varying(20) COLLATE pg_catalog."default",
    created_at timestamp without time zone,
    updated_at timestamp without time zone
)

employeeテーブルには存在したprimary keyやnot nullはemployee3テーブルにはついていません。

employeeテーブルのデータはemployee3テーブルにコピーされます。

後からalter tableでidをprimary keyにすることはできます。

ALTER TABLE employee3 ADD PRIMARY KEY(id)

 

テーブル定義を作成してinsert selectでデータを登録する

primary key制約やnot null制約を設定できます。

CREATE TABLE IF NOT EXISTS employee4(
	id INT,
	name VARCHAR(20) not null,
	romaji VARCHAR(20),
	created_at TIMESTAMP,
	updated_at TIMESTAMP,
	primary key(id)
);

 

データを登録するinsert文です。

INSERT INTO employee4 SELECT * FROM employee

以下のようにselect文で列名を書いても登録できます。

INSERT INTO employee4
SELECT id,name,romaji,created_at,updated_at FROM employee

関連の記事

AWS Redshiftでcreate table文を取得

△上に戻る