\xexport 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$;
!~*: 正規表現に一致しない、大文字・小文字を区別しない
SELECT c.relfilenode, c.relname, ns.nspname AS schema, c.relkind FROM pg_class c JOIN pg_namespace ns ON c.relnamespace = ns.oid WHERE c.relkind='r' AND c.relname LIKE 't_%' AND c.relfilenode IN(12345,23456) ORDER BY c.relfilenode;
pg_dump -U <ユーザーID> --data-only -t <テーブル名> -d <DB名> > xxx.sqlpsql -f xxx.sql <DB名>pg_dump -d dbname > db.sql
pg_dump --clean --create -d dbname > db.sql
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 で拡張表示すると見やすくなる。