PostgreSQL Database
Installation
Mac
brew install postgresql
postgres -D /usr/local/var/postgres
When the database doesn’t start successfully after brew upgrade
, try pg_ctl -D /usr/local/var/postgres start
so that it prints out the detail message such as “The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 12.2.”
For upgrading, brew postgresql-upgrade-database
will help.
or
brew services start postgresql
Login as root user
Mac
psql postgres
Linux
sudo su - postgres
psql
Create Account
CREATE USER user_name WITH LOGIN CREATEDB PASSWORD 'XXXXXXXXXX';
Create Database
create database dbname;
CREATE DATABASE dbname OWNER rolename;
Add User to Group (Other Role)
GRANT group_name TO user_name;
Create Database
CREATE DATABASE sample
WITH OWNER = role_name
ENCODING = 'UTF8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
Grant ALL
postgres=> create database db_name;
CREATE DATABASE
postgres=> create user user_name With login password 'password';
CREATE ROLE
postgres=> grant all on database db_name to user_mame;
GRANT
CREATE ROLE group_name WITH NOLOGIN;
CREATE USER role_name WITH LOGIN PASSWORD 'XXXXXXX' INHERIT;
- Grant select all table or something in the database, or revoke
- login to the database, first
- Execute ddl
GRANT SELECT ON all tables IN SCHEMA public to role_name;
権限追加後に作成されるテーブルには、自動的に権限がつかないので注意。 (The user can’t access new tables added after executing
GRANT
SQL.)CREATE ROLE test_user WITH LOGIN CREATEDB PASSWORD 'test_user';
GRANT test_group TO test_user; REVOKE test_group FROM test_user;
CREATE DATABASE sample
WITH OWNER = test_user
ENCODING = 'UTF8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1;
pg_restore -j 2 --dbname sample -U postgres -h <<hostname>> --role=test_user -O XXXXXXimportfileXXXXXXXX
Other Grant Pattern
GRANT CONNECT ON DATABASE table_name TO username;
GRANT USAGE ON SCHEMA public TO username;
- for specific tables
GRANT SELECT ON table_name TO username; GRANT SELECT ON ALL TABLES IN SCHEMA public TO username;
- To add access to the new tables in the future automatically
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO username;
Configuration
Locale
- initdb実行時にロケールを指定していなければ、OSに設定されているロケールが使用される。
- ロケールは停止しないと変更できない。
Encoding
- デフォルトでは sql_ascii
- sql_ascii ではターミナルでマルチバイト文字を入力できない
Meta Command
Show connection info
\conninfo
change user, connect to the database
to the same database
\connect - user_name
to another database
\connect database_name user_name
Re-execution
\g
Show table
-
show tables
\d
-
show tables with sizes and comments
\d+
-
show the specific table layout
\d table_name
-
show the specific table layout with storage type and comments.
\d+ table_name
Timing
show duration of the SQL.
\timing
Touple only (Except header)
show only the result data without header.
\t
COPY
-
Export
\COPY (SELECT * FROM table_name WHERE condition) TO '/tmp/output.txt' CSV HEADER DELIMITER ','; \COPY (SELECT * FROM table_name WHERE condition) TO '/tmp/output.txt';
-
Import
\copy table_name from '/tmp/output.txt' \copy table_name from '/tmp/output.txt' CSV HEADER DELIMITER ','; \copy table_name(column_1, column_2) from '/tmp/output.txt'; \copy table_name(column_1, column_2) from '/tmp/output.txt' CSV HEADER DELIMITER ',';
UPSERT
制約(Constraint)がある場合に使用可能。 CONFLICT が生じるときに UPDATE にする。
FUNCTION
- See code
SELECT routine_definition FROM information_schema.routines WHERE specific_schema LIKE 'public' AND routine_name LIKE 'functionName';
VACUUM
- 機能
- 参照されなくなったデータファイルを利用可能にする。
- 不要になったトランザクションID(XID)を回収する。
- 統計情報を更新する。
- 自動的に行われる。
- 長いトランザクションやインデックスの高頻度更新処理では実行されないまたは高頻度で実行されることがある。
- 大きくなったファイルが小さくなることはない。
- 大きくなったファイルを小さくするには、
VACUUM FULL
またはCLUSTER
コマンドを実行する。
- 大きくなったファイルを小さくするには、
Execute SQL om File
use psql with -f
option.
-
Example
psql -f file_path.txt -U user_name db_name -h host
Docker
docker run -d --name postgres -e POSTGRES_PASSWORD=password -p 5432:5432 postgres:11
docker run -d -p 5432:5432 --name docker_process_name -e POSTGRES_USER=user_name -e POSTGRES_PASSWORD=password -e POSTGRES_DB=db_name
-p 5432:5432
- first
5432
shows the listening port. docker forward access to the port to the destination port. - last
5432
shows the destination port.
- first
Reference
- stackoverflow. (2014). How to display the function, procedure, triggers source code in postgresql? Retrieved from https://stackoverflow.com/questions/6898453/how-to-display-the-function-procedure-triggers-source-code-in-postgresql