\x
export PGHOST=192.168.1.1
export PGPORT=65432
export PGUSER=hoge
\set HISTCONTROL ignoredups
\set COMP_KEYWORD_CASE upper
psql -F "<tab>" -Atc "SELECT xxx FROM xxx"
-F: 区切り文字, <tab> は contrl + V, I で入力(I は A から数えて 9番目)
-A: 桁揃えなし(no align)
-t: 結果のみを表示(tuple only)
CREATE TABLE hoge(
id bigint NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name varchar(16)
);
id という名前でプライマリーキーを作成し、シーケンスで採番する。
CREATE TABLE hoge(
date timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL PRIMARY KEY,
name varchar(16)
) PARTITION BY RANGE(date);
CREATE TABLE hoge_202301 PARTITION OF hoge FOR VALUES FROM ('2023-01-01 00:00:00') TO ('2023-02-01 00:00:00');
\d hoge_202301
Table "public.hoge_202301"
Column | Type | Collation | Nullable | Default
--------+--------------------------+-----------+----------+-------------------
date | timestamp with time zone | | not null | CURRENT_TIMESTAMP
name | character varying(16) | | |
Partition of: hoge FOR VALUES FROM ('2023-01-01 00:00:00+00') TO ('2023-02-01 00:00:00+00')
Indexes:
"hoge_202301_pkey" PRIMARY KEY, btree (date)
CREATE TABLE hoge(
id bigint NOT NULL GENERATED ALWAYS AS IDENTITY,
date timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
name varchar(16)
) PARTITION BY RANGE(date);
CREATE TABLE hoge_202301 PARTITION OF hoge FOR VALUES FROM ('2023-01-01 00:00:00') TO ('2023-02-01 00:00:00');
ALTER TABLE ONLY hoge_202301 ADD CONSTRAINT hoge_202301_pkey PRIMARY KEY (id);
次のようにプライマリーキーとは別のカラムでパーテション化される。
\d hoge_202301
Table "public.hoge_202301"
Column | Type | Collation | Nullable | Default
--------+--------------------------+-----------+----------+-------------------
id | bigint | | not null |
date | timestamp with time zone | | not null | CURRENT_TIMESTAMP
name | character varying(16) | | |
Partition of: hoge FOR VALUES FROM ('2023-01-01 00:00:00+00') TO ('2023-02-01 00:00:00+00')
Indexes:
"hoge_202301_pkey" PRIMARY KEY, btree (id)
DO $do$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint con JOIN pg_class cls ON con.conrelid = cls.oid WHERE con.contype = 'p' AND cls.relname = 'primary_key_name' ) THEN ALTER TABLE IF EXISTS table_name ADD CONSTRAINT primay_key_name PRIMARY KEY (pk_column); END IF; END $do$;
pg_dump -U <ユーザーID> --data-only -t <テーブル名> -d <DB名> > xxx.sql
psql -f xxx.sql <DB名>
pg_dump -h 192.168.1.1 dbname | psql dbname
pg_dump -Fc -h 192.168.1.1 dbname | pg_restore -Fc -d dbname
pg_dumpall -h 192.168.1.1 | psql
pg_dumpall | gzip > dumpfile
zcat dumpfile | psql postgres
pg_dump -Fc -O dbname > dbname.dump
DB を作成してインポート
psql
create user someuser;
create database somedb with owner=someuser encoding=UTF8;
\q
psql -d somedb
alter schema public owner to someuser;
\q
select setval('シーケンス名',10);
select setval('シーケンス名',1,false);
select currval('シーケンス名');
\d シーケンス名
select last_value from <シーケンス名>;
SELECT CURRENT_TIMESTAMP + '1 hour'
SELECT CURRENT_TIMESTAMP + '30 minute'
SELECT CURRENT_TIMESTAMP + time '00:30'
SELECT CURRENT_TIMESTAMP - time '00:30'
log_statement='all'
SELECT l.pid,l.granted,d.datname,l.locktype,relation,relation::regclass,transactionid,l.mode FROM pg_locks l LEFT JOIN pg_database d ON l.database = d.oid WHERE l.pid != pg_backend_pid() ORDER BY l.pid;
SELECT oid, relname, relnamespace, relowner FROM pg_class WHERE oid=123;
SELECT * FROM pg_stat_activity WHERE pid=123;
\x で拡張表示すると見やすくなる。