postgres
https://gyazo.com/84b54ac3c98281b7ebd159151441eefb
docker
$ docker pull postgres:alpine
$ docker run -e POSTGRES_PASSWORD=mysecretpassword -d postgres
CLI client
Ubuntu: apt install postgresql-client-11
macOS: brew install libpq
$ brew link --force libpq
基本
\l show databases
\c <DB> use <DB>
\dt; show tables
\d <TBL> desc <TBL>
Tips
psql でアクセスしようとして role "root" does not exist が出る場合
su - postgres で postgres ユーザーになればOK
Extension
code:sql
-- アンインストール
drop extension "uuid-ossp";
-- スキーマ自体の削除。これで何が起きるのかよく知らない
drop schema extensions;
-- インストール
create extension "uuid-ossp";
-- 利用可能な Extension の確認
\dx;
スキーマ
スキーマにはテーブルが含まれる
同じオブジェクト名を異なるスキーマで使用しても矛盾は起きない
データベースとは異なり厳格に分離されていない
権限さえあれば接続しているデータベース内のどのスキーマのオブジェクトにもアクセスできる
入れ子にはできない
好まれる理由
1つのデータベースを多数のユーザが互いに干渉することなく使用できるようにするため
管理しやすくなるよう、データベースオブジェクトを論理グループに編成するため
サードパーティのアプリケーションを別々のスキーマに入れることにより、他のオブジェクトの名前と競合しないようにするため
code:sql
CREATE SCHEMA myschema;
CREATE TABLE myschema.mytable (...);
DROP SCHEMA myschema; -- 空のスキーマを削除
DROP SCHEMA myschema CASCADE; -- オブジェクトを含むスキーマを削除
-- public スキーマ
-- 以下2つのクエリは同意
CREATE TABLE products (...);
CREATE TABLE public.products (...);
オーナー
code:sql
SELECT
'ALTER TABLE ' || schemaname
|| '.' || tablename ||
' OWNER TO new_user;'
FROM pg_tables
WHERE tableowner ='old_user';