Meta tags:
Headings (most frequently used words):
drop, create, join, alter, table, user, database, to, schema, set, トランザクション, grant, du, role, owner, view, update, procedure, df, function, trigger, 自動インクリメント, とほほのpostgresql入門, 目次, postgresqlとは, インストール, psqlコマンド, sql, ddl, dml, dcl, ユーザ, ロール, データベース, スキーマ, テーブル, ビュー, データ操作, 結合, 権限付与, プロシージャ, 関数, トリガー, クエリーバッファ, 表示モード, 変数, その他, リンク, ユーザ一覧を表示する, ユーザを作成する, ユーザを削除する, パスワードを変更する, with, password, ロール一覧を表示する, ロールを作成する, ロールを削除する, データベースの一覧を表示する, データベースを作成する, データベースを削除する, データベースのオーナーを変更する, データベースを変更する, スキーマの一覧を表示する, dn, スキーマを作成する, スキーマを削除する, スキーマのオーナーを変更する, カレントスキーマを表示する, current_schema, カレントスキーマを変更する, search_path, テーブルの一覧を表示する, dt, テーブルを作成する, テーブルを削除する, テーブルのカラム一覧を表示する, テーブルにカラムを追加する, add, カラム名を変更する, rename, カラムを削除する, テーブルを空にする, truncate, カラムの型, ビューを作成する, ビューを削除する, ビューの一覧を表示する, dv, ビューを編集する, ev, 参照, select, 挿入, insert, 更新, 削除, delete, あれば更新, なければ挿入, upsert, 内部結合, 左外部結合, left, 右外部結合, right, 完全外部結合, full, クロス結合, cross, 結果結合, union, begin, commit, rollback, 行レベルロック, for, share, テーブルロック, lock, テーブルに対する権限を追加する, 権限を削除する, revoke, プロシージャを作成する, プロシージャの一覧を表示する, プロシージャを削除する, 関数を作成する, 関数の一覧を表示する, 関数の内容を表示する, sf, 関数の内容を編集する, ef, 関数を削除する, 関数内で変数の値を表示する, raise, トリガーを作成する, トリガーの一覧を表示する, トリガーを削除する, クエリーバッファを表示する, クエリーバッファを編集する, ヒストリを表示する, 詳細表示, ヘッダ表示抑制, アライメント制御, カンマ表示, fieldsep, ページャ表示, pager, htmlモード, 変数の一覧を表示する, 変数を設定する, 変数を表示する, echo, 変数を使用する, name, 外部ファイルを読み込む, ヘルプ, 初期設定ファイル, psqlrc, serial, identity, データベースをダンプする, pg_dump,
Text of the page (most frequently used words):
users (66), #select (66), #create (52), from (46), name (45), u001 (35), table (34), yamada (33), drop (32), insert (29), join (29), text (28), u002 (26), postgresql (25), point (22), alter (21), update (21), postgres (20), tanaka (20), values (19), set (19), into (18), sudo (16), points (15), where (13), database (13), suzuki (12), user_id (11), begin (11), u003 (11), schema (11), user (11), u004 (10), mytable (10), https (9), for (9), sql (8), int (8), key (8), trigger (8), function (8), myschema (8), grant (8), role (8), with (7), primary (7), serial (7), add_func (7), integer (7), language (7), revoke (7), commit (7), view (7), psql (7), apt (7), www (6), identity (6), numbers (6), procedure (6), delete (6), left (6), owner (6), org (5), 100 (5), search_path (5), pset (5), pager (5), add (5), add_user (5), ロール (5), lock (5), share (5), rollback (5), full (5), right (5), group (5), date (5), mydb (5), pg_dump (4), localhost (4), 自動インクリメント (4), psqlrc (4), echo (4), を実行すると (4), もう一度 (4), fieldsep (4), new (4), raise (4), public (4), all (4), truncate (4), トランザクション (4), union (4), cross (4), u12345 (4), points_view (4), 999999 (4), time (4), template1 (4), password (4), docker (4), install (4), users_id_seq (3), default (3), always (3), generated (3), bigserial (3), を使用します (3), plpgsql (3), end (3), call (3), を用います (3), ユーザ (3), access (3), を参照してください (3), users_a (3), users_b (3), 左テーブル (3), outer (3), u123 (3), なければ挿入 (3), upsert (3), avg (3), count (3), order (3), limit (3), ビュー (3), 23e6 (3), 1999 (3), rename (3), current_schema (3), スキーマ (3), などがあります (3), dcl (3), data (3), dml (3), ddl (3), pgdg (3), dnf (3), html (2), リンク (2), データベースをダンプする (2), restart (2), sequence (2), ただし (2), true (2), eof (2), off (2), 初期設定ファイル (2), ヘルプ (2), 外部ファイルを読み込む (2), その他 (2), 変数を使用する (2), 変数を表示する (2), 変数を設定する (2), 変数の一覧を表示する (2), align (2), center (2), htmlモード (2), ページャ表示 (2), カンマ表示 (2), アライメント制御 (2), ヘッダ表示抑制 (2), auto (2), 詳細表示 (2), 表示モード (2), ヒストリを表示する (2), クエリーバッファを編集する (2), クエリーバッファを表示する (2), クエリーバッファ (2), add_func_trigger (2), トリガーを削除する (2), information_schema (2), トリガーの一覧を表示する (2), return (2), returns (2), トリガーを作成する (2), トリガー (2), notice (2), 関数内で変数の値を表示する (2), 関数を削除する (2), 関数の内容を編集する (2), 関数の内容を表示する (2), 関数の一覧を表示する (2), 言語を指定 (2), 関数を作成する (2), プロシージャを削除する (2), プロシージャの一覧を表示する (2), プロシージャを作成する (2), pgsql (2), プロシージャ (2), tables (2), privileges (2), 権限を削除する (2), テーブルに対する権限を追加する (2), 権限付与 (2), exclusive (2), 詳細は (2), テーブルロック (2), 他は更新 (2), 排他ロック (2), 行レベルロック (2), sasaki (2), 結果結合 (2), クロス結合 (2), は右外部結合と呼ばれ (2), 完全外部結合 (2), 右テーブル (2), にあるレコードのみが出力されます (2), 右外部結合 (2), 左外部結合 (2), 内部結合 (2), がある (2), when (2), matched (2), then (2), merge (2), あれば更新 (2), user_name (2), average (2), having (2), distinct (2), offset (2), データ操作 (2), ビューを編集する (2), ビューの一覧を表示する (2), ビューを削除する (2), ビューを作成する (2), 可変長実数 (2), 123 (2), 上記の別名 (2), タイムゾーン無し (2), タイムゾーン有り (2), jst (2), timestamp (2), zone (2), character (2), カラムの型 (2), テーブルを空にする (2), カラムを削除する (2), カラム名を変更する (2), テーブルにカラムを追加する (2), テーブルのカラム一覧を表示する (2), テーブルを削除する (2), テーブルを作成する (2), テーブルの一覧を表示する (2), テーブル (2), schema1 (2), schema2 (2), カレントスキーマを変更する (2), カレントスキーマを表示する (2), スキーマのオーナーを変更する (2), スキーマを削除する (2), スキーマを作成する (2), スキーマの一覧を表示する (2), データベースを変更する (2), データベースのオーナーを変更する (2), データベースを削除する (2), データベースを作成する (2), データベースの一覧を表示する (2), template0 (2), データベース (2), myrole (2), ロールを削除する (2), ロールを作成する (2), usename (2), ロール一覧を表示する (2), パスワードを変更する (2), ユーザを削除する (2), ユーザを作成する (2), ユーザ一覧を表示する (2), quit (2), help (2), psqlコマンド (2), exec (2), bin (2), wget (2), pub (2), repos (2), list (2), get (2), download (2), server (2), systemctl (2), インストール (2), mysql (2), postgresqlとは (2), とほほのpostgresql入門 (2), tohoho, web, com, 2023年12月31日, 最終更新, 2025年6月22日, copyright, 2023, 2025, 杜甫々, 日本語マニュアル, document, 日本postgresqlユーザ会, docs, current, history, dump, でデータベースの内容を, にダンプすることができます, 次に採番するシーケンス番号は, に対して, することで変更することができます, _seq, column, nakada, 自動採番が3となり成功, 個別指定の2と自動採番の2が重複するのでエラー, 2を個別指定, alwaysであればエラー, 初期値として1が採番される, を指定すると自動インクリメントの値を, 文で指定することはできません, であれば指定することができます, 指定した値と自動採番された値が重複した場合はエラーとなります, 以降では, 標準である, が使用可能となりました, 独自の機能のため, 現在は後述の, の方が推奨されています, 32ビット長のため, これよりも大きなインデックスを使用する場合は, currval, pg_catalog, pg_get_serial_sequence, setval, 下記の様にしてシーケンス番号を確認したり変更したりできます, rows, 型のカラムは, する度に自動インクリメントされるシーケンス番号を保持することができます, cat, mychema, ファイルにコマンドを記述しておくと, ログイン時に自動実行してくれます, コマンド一覧, コマンドのヘルプ, バックスラッシュコマンドの一覧, psqlコマンドオプションの一覧, variables, options, などのコマンドのヘルプ, などのバックスラッシュコマンドのヘルプを表示することができます, file, 数値として参照したいときは, 文字列として参照したいときは, とします, border, の結果を, htmlモードで表示します, を実行すると通常モードに戻ります, レコード数が多いと, の結果が, more, でページャ表示されますが, 下記でページャ表示の有無を切り替えることができます, でアライメント無しモードにして, をカンマ, に指定すると, カラムをカンマ, 区切りで表示することができます, の結果でカラムの一番長い文字数に合わせてアライメントしなくなります, を実行するとアライメントモードに戻ります, の結果でヘッダの表示を抑制します, を実行するとヘッダ表示モードに戻ります, としておくと, 表示する内容によって, 表形式, レコード形式, を自動的に切り替えてくれます, record, の結果が表形式ではなく, レコード毎表示に切り替わります, を実行すると表形式モードに戻ります, クエリーバッファは直前に実行した, などのコマンドです, クエリーバッファを表示したり, 外部エディタで編集して再実行することができます, triggers, pg_trigger, each, row, execute, after, declare, テーブルにデータが, されたなどのタイミングで関数を呼び出すこともできます, 下記の例では, に値が, されたら, その合計を, に入れる例を示しています, デバッグなどの目的で, 関数の中の変数の値を表示したいときは, レベルには, debug, log, info, warning, exception, があります, 関数を呼び出し, 関数は下記の様にして呼び出すことができます, 関数を定義, 戻り値の型はinteger, までの間が関数定義, の和を返す, 関数定義の終わり, 下記の様に関数を定義することができます, プロシージャと似ていますが, 戻り値を返すことができる点が異なります, プロシージャは下記の様に呼び出すことができます, add_userプロシージャを定義, までの間がプロシージャ定義, プロシージャ定義の終わり, 下記の様にプロシージャを定義することができます, 手続きをまとめて実行するプロシージャをサポートしています, 開発言語としては, javascript, c言語などもサポートされています, python, perl, tcl, 権限を削除するには, スキーマに含まれるすべてのテーブルに対する権限を与えるには次のようにします, に対してテーブルに対する権限を付与します, 権限には, references, を指定できます, mode, まで様々なロックモードがサポートされています, 明示的ロック, テーブル単位でロックするには, 共有ロック, 他の更新を禁止するためのロック, 排他ロックできないが, 共有ロックできる, 自分が更新するためのロック, 共有ロックできない, または, を用いて, した対象のレコードをロックすることができます, ロックしている間, 他のプロセスは禁止された操作がブロックされます, をつけた場合はエラー, nowait, はトランザクションを破棄してトランザクション開始前の状態に戻します, exists, 例えば, aさんのポイントを, 10ポイント, bさんに移す場合, aさんのポイントを10減算する, bさんのポイントを10加算する, という処理を行います, この際, の処理を行ったあと, の処理を行う間は不整合な状態にあります, の両方を行ってからまとめてデータベースに反映するためにはトランザクションを用います, はトランザクションを開始し, はトランザクションの結果をまとめてデータベースに書き込みます, を用いると複数の, の結果を縦方向に結合することができます, は左テーブルと右テーブルの完全な組み合わせを出力します, または右テーブル, にあるレコードがすべて出力されます, は左外部結合と呼ばれ, は内部結合と呼ばれ, 右テーブル両方にあるレコードが出力されます, inner, 左テーブルには, 右テーブルには, は複数のテーブルを結合します, 下記の結合方法があります, に指定するのが左テーブル, で指定するのが右テーブルと呼ばれます, 確認のために下記のような左テーブル, を用意します, not, using, からは, 文も使用できるようになりました, conflict, 該当するレコードがあれば更新, する仕組みで, と呼ばれます, 重複を判断するカラムは, unique, 制約のカラムである必要があります, による集約を行う前に抽出を行いますが, による集約を行った後に抽出を行います, は指定したカラムでグルーピングし, 平均値, 最大値, max, 最小値, min, などの集約関数の結果を出力します, は重複したデータを排除した結果を出力します, はレコードの件数を表示します, は検索を開始する位置を指定します, は表示する最大件数を指定します, desc, はソート条件を指定します, は検索条件を指定します, schemaname, viewname, viewowner, pg_views, dtop, dare, は他のテーブルの値を, した結果を仮想的なテーブル, として定義します, 2バイト整数, 32767, 4バイト整数, 2147483647, 8バイト整数, 9223372036854775807, 4バイト浮動小数点数, 8バイト浮動小数点数, decimalの別名, 8バイト通貨, n文字以下の文字列, n文字の文字列, 不足分は空白, 上限なし文字列, バイト列, xffffffffffffffff, 時間間隔, p00001, 03t04, 真偽値, false, boolean, 論理値, interval, bytea, バイナリ, char, varchar, varying, 文字型, money, numeric, decimal, double, precision, real, bigint, smallint, 主な型を下記に示します, この他にも様々な型が使用できます, データ型, column_name, old_name, new_name, new_column, pg_tables, ひとつのスキーマの中に複数のテーブルを作成することができます, スキーマは検索順序で指定します, 下記の様に指定すると, テーブルを探す際に, の順序で探します, show, schemata, ひとつのデータベースの中に複数のスキーマを作成することができます, デフォルトでは, という名前のスキーマが作成されています, スキーマ名を省略した場合は, スキーマが使用されます, pg_database, はデフォルトで使用されるデータベースです, で他のデータベースを作成することもできます, でデータベースを作成する際にテンプレートとして使用されるデータベースです, にテーブルを作成しておくと, 新規データベース作成時にも同じテーブルが作成されます, に何かテーブルが作成された状態で空のデータベースを作成したい時に使用します, template, オプションに指定します, ではひとつのデータベースクラスタ中に複数のデータベースを持つことができます, デフォルトでは下記のデータベースが作成されています, pg_roles, ではユーザとロールはほぼ同じものと考えて構いません, ユーザを作成すると同名のロールも作成されます, ロールを作成しても同名のユーザが作成されます, の違いは, が作成したユーザ, login, 権限がつくのに対して, で作成したユーザ, nologin, 権限となりログインできない点が異なります, yamada123, pg_user, はユーザ権限を設定したり, トランザクションを制御するコマンド群で, control, はデータを参照, 更新するコマンド群で, manipulation, はデータベース, テーブルなどを作成, 削除するコマンド群で, definition, でデータを管理するには, では様々なコマンド群がサポートされいますが, 下記に大別されます, structured, query, 終了するには, type, に接続するクライアントコマンドです, で接続先サーバを, でユーザidを, でデータベース名を指定します, ユーザid, を省略すると, のログインユーザid, でアクセスします, run, postgres_password, bash, lsb, release, gnupg, deb, lsb_release, main, etc, sources, quiet, media, keys, accc4cf8, asc, yum, reporpms, x86_64, redhat, repo, latest, noarch, rpm, module, disable, postgresql16, usr, setup, initdb, enable, start, rhel9, almalinux9, rocky, linux9, ubuntu, 下記を参照してインストールしてください, 各バージョンのサポート状況は, endoflife, bsdライセンスライクな, the, license, で提供され, 商用に関わらず無償で利用できます, oracle, microsoft, に続いて世界第4位のシェアを占めます, 米国バークレー校が開発した, ingres, データベースをベースにして, と名づけられ, となりました, オープンソースのデータベースエンジンのひとつで, mariadb, と双璧をなしています, トップ, とほほのwww入門,
Text of the page (random words):
プロシージャの一覧を表示する df プロシージャを削除する drop procedure 関数 関数を作成する create function 関数の一覧を表示する df 関数の内容を表示する sf 関数の内容を編集する ef 関数を削除する drop function 関数内で変数の値を表示する raise トリガー トリガーを作成する create trigger トリガーの一覧を表示する トリガーを削除する drop trigger クエリーバッファ クエリーバッファを表示する p クエリーバッファを編集する e ヒストリを表示する s 表示モード 詳細表示 x ヘッダ表示抑制 t アライメント制御 a カンマ表示 fieldsep ページャ表示 pager htmlモード h 変数 変数の一覧を表示する set 変数を設定する set 変数を表示する echo 変数を使用する name その他 外部ファイルを読み込む i ヘルプ h 初期設定ファイル psqlrc 自動インクリメント serial 自動インクリメント identity データベースをダンプする pg_dump リンク postgresqlとは オープンソースのデータベースエンジンのひとつで mysql mariadb と双璧をなしています 米国バークレー校が開発した ingres データベースをベースにして postgres と名づけられ 後に postgresql となりました oracle database mysql microsoft sql server に続いて世界第4位のシェアを占めます bsdライセンスライクな the postgresql license で提供され 私用 商用に関わらず無償で利用できます 各バージョンのサポート状況は https endoflife date postgresql を参照してください インストール 下記を参照してインストールしてください https www postgresql org download docker sudo docker run name my postgres e postgres_password my password d postgres sudo docker exec it my postgres psql h localhost u postgres d postgres sudo docker exec it my postgres bin bash psql h localhost u postgres d postgres ubuntu 22 04 sudo apt y install lsb release wget gnupg sudo sh c echo deb https apt postgresql org pub repos apt lsb_release cs pgdg main etc apt sources list d pgdg list wget quiet o https www postgresql org media keys accc4cf8 asc sudo apt key add sudo apt get update sudo apt get y install postgresql sudo u postgres psql rhel9 almalinux9 rocky linux9 sudo dnf install y https download postgresql org pub repos yum reporpms el 9 x86_64 pgdg redhat repo latest noarch rpm sudo dnf qy module disable postgresql sudo dnf install y postgresql16 server sudo usr pgsql 16 bin postgresql 16 setup initdb sudo systemctl enable postgresql 16 sudo systemctl start postgresql 16 sudo u postgres psql psqlコマンド psql は postgresql に接続するクライアントコマンドです h で接続先サーバを u でユーザidを d でデータベース名を指定します ユーザid を省略すると os のログインユーザid でアクセスします psql h localhost u postgres d postgres psql 16 1 type help for help postgres 終了するには quit を使用します postgres quit sql ddl dml dcl postgresql でデータを管理するには sql structured query language を用います sql では様々なコマンド群がサポートされいますが 下記に大別されます ddl data definition language はデータベース スキーマ テーブルなどを作成 削除するコマンド群で create drop alter などがあります dml data manipulation language はデータを参照 挿入 削除 更新するコマンド群で select insert delete update などがあります dcl data control language はユーザ権限を設定したり トランザクションを制御するコマンド群で grant revoke begin commit rollback などがあります ユーザ ユーザ一覧を表示する du du select usename from pg_user ユーザを作成する create user create user yamada ユーザを削除する drop user drop user yamada パスワードを変更する alter user with password alter user yamada with password yamada123 ロール postgresql ではユーザとロールはほぼ同じものと考えて構いません ユーザを作成すると同名のロールも作成されます ロールを作成しても同名のユーザが作成されます create user と create role の違いは create user が作成したユーザ ロール に login 権限がつくのに対して create role で作成したユーザ ロール には nologin 権限となりログインできない点が異なります ロール一覧を表示する du du select usename from pg_roles ロールを作成する create role create role myrole ロールを削除する drop role drop role myrole データベース postgresql ではひとつのデータベースクラスタ中に複数のデータベースを持つことができます デフォルトでは下記のデータベースが作成されています postgres template0 template1 postgres はデフォルトで使用されるデータベースです create database で他のデータベースを作成することもできます template1 は create database でデータベースを作成する際にテンプレートとして使用されるデータベースです template1 にテーブルを作成しておくと 新規データベース作成時にも同じテーブルが作成されます template0 は template1 に何かテーブルが作成された状態で空のデータベースを作成したい時に使用します create database の template オプションに指定します データベースの一覧を表示する l l select from pg_database データベースを作成する create database create database mydb データベースを削除する drop database drop database mydb データベースのオーナーを変更する alter database owner to alter database mydb owner to yamada データベースを変更する c postgres c mydb mydb スキーマ ひとつのデータベースの中に複数のスキーマを作成することができます デフォルトでは public という名前のスキーマが作成されています スキーマ名を省略した場合は public スキーマが使用されます public スキーマの一覧を表示する dn dn dn select from information_schema schemata スキーマを作成する create schema create schema myschema スキーマを削除する drop schema drop schema myschema スキーマのオーナーを変更する alter schema owner to alter schema myschema owner to yamada カレントスキーマを表示する current_schema select current_schema show search_path カレントスキーマを変更する set search_path to スキーマは検索順序で指定します 下記の様に指定すると テーブルを探す際に schema1 schema2 の順序で探します set search_path to schema1 schema2 テーブル ひとつのスキーマの中に複数のテーブルを作成することができます テーブルの一覧を表示する dt dt dt myschema select from pg_tables テーブルを作成する create table create table mytable id text name text create table myschema mytable id text name text テーブルを削除する drop table drop table mytable drop table myschema mytable テーブルのカラム一覧を表示する d d mytable d myschema mytable テーブルにカラムを追加する alter table add alter table mytable add new_column text カラム名を変更する alter table rename alter table mytable rename old_name to new_name カラムを削除する alter table drop alter table mytable drop column_name テーブルを空にする truncate truncate mytable カラムの型 主な型を下記に示します この他にも様々な型が使用できます 詳細は postgresql の データ型 を参照してください 数値 smallint 2バイト整数 例 32767 integer 4バイト整数 例 2147483647 bigint 8バイト整数 例 9223372036854775807 real 4バイト浮動小数点数 例 1 23 1 23e6 double precision 8バイト浮動小数点数 例 1 23 1 23e6 decimal 可変長実数 例 123 1 23 1 23e6 numeric 可変長実数 decimalの別名 通貨 money 8バイト通貨 例 123 45 文字型 character varying n n文字以下の文字列 varchar n 上記の別名 character n n文字の文字列 不足分は空白 char n 上記の別名 text 上限なし文字列 バイナリ bytea バイト列 例 e xffffffffffffffff 日付 時刻 date 日付 例 1999 12 31 time 時刻 タイムゾーン無し 例 23 59 59 999999 time with time zone 時刻 タイムゾーン有り 例 23 59 59 999999 jst timestamp 日付 時刻 タイムゾーン無し 例 1999 12 31 23 59 59 999999 timestamp with time zone 日付 時刻 タイムゾーン有り 例 1999 12 31 23 59 59 999999 jst interval 時間間隔 例 p00001 02 03t04 05 06 論理値 boolean 真偽値 例 true false ビュー ビューを作成する create view create view は他のテーブルの値を select した結果を仮想的なテーブル ビュー として定義します create table users id text name text create table points id text date date point integer create view points_view id name dare point as select p id u name p date p point from points as p left join users as u on u id p id select from points_view ビューを削除する drop view dtop view points_view ビューの一覧を表示する dv dv select schemaname viewname viewowner from pg_views ビューを編集する ev ev points_view データ操作 参照 select select from users where は検索条件を指定します select from users where user_id u12345 order by はソート条件を指定します select from users order by user_id desc limit は表示する最大件数を指定します select from users limit 10 offset は検索を開始する位置を指定します select from users order by user_id offset 10 limit 10 count はレコードの件数を表示します select count from users distinct は重複したデータを排除した結果を出力します select distinct id from users group by は指定したカラムでグルーピングし 個数 count 平均値 avg 最大値 max 最小値 min などの集約関数の結果を出力します select id avg point as average from points group by id where は group by による集約を行う前に抽出を行いますが having は group by による集約を行った後に抽出を行います select id avg point as average from points group by id having id u001 挿入 insert insert into users user_id user_name values u12345 yamada 更新 update update users set user_name tanaka where user_id u12345 削除 delete delete from users where user_id u12345 あれば更新 なければ挿入 upsert 該当するレコードがあれば更新 update し なければ挿入 insert する仕組みで 属に upsert と呼ばれます 重複を判断するカラムは primary key か unique 制約のカラムである必要があります create table users id text name text primary key id insert into users values u123 yamada insert into users values u123 tanaka on conflict id do update set name tanaka postgresql 15 からは merge 文も使用できるようになりました merge into users as a using values u123 suzuki as b id name on a id b id when matched then update set name b name when not matched then insert id name values b id b name 結合 join join は複数のテーブルを結合します 下記の結合方法があります from に指定するのが左テーブル join で指定するのが右テーブルと呼ばれます 確認のために下記のような左テーブル points 右テーブル users を用意します create table users id text name text create table points id text point integer insert into users values u001 yamada u002 tanaka u003 suzuki insert into points values u001 82 u002 63 u004 58 select from points 左テーブルには u001 u002 u004 がある id point u001 82 u002 63 u004 58 select from users 右テーブルには u001 u002 u003 がある id name u001 yamada u002 tanaka u003 suzuki 内部結合 join join inner join は内部結合と呼ばれ 左テーブル 右テーブル両方にあるレコードが出力されます select from points as p join users as u on u id p id id point id name u001 82 u001 yamada u002 63 u002 tanaka 左外部結合 left join left join left outer join は左外部結合と呼ばれ 左テーブル points にあるレコードのみが出力されます select from points as p left join users as u on u id p id id point id name u001 82 u001 yamada u002 63 u002 tanaka u004 58 右外部結合 right join right join right outer join は右外部結合と呼ばれ 右テーブル users にあるレコードのみが出力されます select from points as p right join users as u on u id p id id point id name u001 82 u001 yamada u002 63 u002 tanaka u003 suzuki 完全外部結合 full join full join full outer join は右外部結合と呼ばれ 左テーブル points または右テーブル users にあるレコードがすべて出力されます select from points as p full join users as u on u id p id id point id name u001 82 u001 yamada u002 63 u002 tanaka u003 suzuki u004 58 クロス結合 cross join cross join は左テーブルと右テーブルの完全な組み合わせを出力します select from points cross join users id point id name u001 82 u001 yamada u001 82 u002 tanaka u001 82 u003 suzuki u002 63 u001 yamada u002 63 u002 tanaka u002 63 u003 suzuki u004 58 u001 yamada u004 58 u002 tanaka u004 58 u003 suzuki 結果結合 union union を用いると複数の select の結果を縦方向に結合することができます create table users_a id text name text create table users_b id text name text insert into users_a values u001 yamada u002 tanaka insert into users_b values u003 sasaki u004 suzuki select from users_a union select from users_b id name u001 yamada u002 tanaka u003 sasaki u004 suzuki トランザクション トランザクション begin commit rollback 例えば aさんのポイントを 10ポイント bさんに移す場合 1 aさんのポイントを10減算する 2 bさんのポイントを10加算する という処理を行います この際 1 の処理を行ったあと 2 の処理を行う間は不整合な状態にあります 1 と 2 の両方を行ってからまとめてデータベースに反映するためにはトランザクションを用います begin はトランザクションを開始し commit はトランザクションの結果をまとめてデータベースに書き込みます drop table if exists users create table users id text name text point int primary key id insert into users values u001 yamada 100 insert into users values u002 tanaka 100 begin update users set point point 10 where id u001 1 update users set point point 10 where id u002 2 commit select from users rollback はトランザクションを破棄してトランザクション開始前の状態に戻します begin update users set point point 10 where id u001 1 update users set point point 10 where id u002 2 rollback 行レベルロック for update share select for update または select for share を用いて select した対象のレコードをロックすることができます ロックしている間 他のプロセスは禁止された操作がブロックされます nowait をつけた場合はエラー for update 排他ロック 自分が更新するためのロック 他は更新 排他ロック 共有ロックできない for share 共有ロック 他の更新を禁止するためのロック 他は更新 排他ロックできないが 共有ロックできる begin select from users where id u001 for update update users set point 100 where id u001 commit テーブルロック lock テーブル単位でロックするには lock を用います begin lock users commit access share から access exclusive まで様々なロックモードがサポートされています 詳細は 明示的ロック を参照してください lock users in access exclusive mode 権限付与 grant テーブルに対する権限を追加する grant ユーザ ロール に対してテーブルに対する権限を付与します 権限には select insert update delete truncate references trigger を指定できます grant all privileges on users to yamada grant select insert update delete on users to yamada スキーマに含まれるすべてのテーブルに対する権限を与えるには次のようにします grant select on all tables in schema myschema to yamada 権限を削除する revoke 権限を削除するには revoke を用います revoke select on users from yamada revoke all privileges on users from yamada revoke select on all tables in schema public from yamada プロシージャ 手続きをまとめて実行するプロシージャをサポートしています 開発言語としては pl pgsql pl tcl pl perl pl python の他 javascript v8 c言語などもサポートされています プロシージャを作成する create procedure 下記の様にプロシージャを定義することができます create procedure add_user id text name text add_userプロシージャを定義 language plpgsql 言語を指定 as までの間がプロシージャ定義 begin insert into users values id name end プロシージャ定義の終わり プロシージャは下記の様に呼び出すことができます create table users id text name text call add_user u001 yamada call add_user u002 tanaka call add_user u003 suzuki select from users プロシージャの一覧を表示する df df プロシージャを削除する drop procedure drop procedure add_user 関数 関数を作成する create function 下記の様に関数を定義することができます プロシージャと似ていますが 戻り値を返すことができる点が異なります create function add_func x int y int add 関数を定義 returns integer 戻り値の型はinteger language plpgsql 言語を指定 as までの間が関数定義 begin return x y x と y の和を返す end 関数定義の終わり 関数は下記の様にして呼び出すことができます select add_func 3 5 関数を呼び出し 関数の一覧を表示する df df 関数の内容を表示する sf sf add_func 関数の内容を編集する ef ef add_func 関数を削除する drop function drop function add_func 関数内で変数の値を表示する raise デバッグなどの目的で 関数の中の変数の値を表示したいときは raise を使用します レベルには debug log info notice warning exception があります raise notice xx yy zz xx yy zz トリガー トリガーを作成する create trigger テーブルにデータが insert されたなどのタイミングで関数を呼び出すこともできます 下記の例では x と y に値が insert されたら その合計を z に入れる例を示しています create table numbers id serial x int y int z int create function add_func returns trigger language plpgsql as declare xx integer yy integer zz integer begin xx new x yy new y zz xx yy update numbers set z zz where id new id return new end create trigger add_func_trigger after insert on numbers for each row execute function add_func insert into numbers x y values 5 3 select from numbers トリガーの一覧を表示する select from pg_trigger select from information_schema triggers トリガーを削除する drop trigger drop trigger add_func_trigger on numbers クエリーバッファ クエリーバッファは直前に実行した select などのコマンドです クエリーバッファを表示したり 外部エディタで編集して再実行することができます クエリーバッファを表示する p p クエリーバッファを編集する e e ヒストリを表示する s s 表示モード 詳細表示 x x を実行すると select の結果が表形式ではなく レコード毎表示に切り替わります もう一度 x を実行すると表形式モードに戻ります select from users id name u001 yamada x select from users record 1 id u001 name yamada x auto としておくと 表示する内容によって 表形式 レコード形式 を自動的に切り替えてくれます x auto ヘッダ表示抑制 t t を実行すると select の結果でヘッダの表示を抑制します もう一度 t を実行するとヘッダ表示モードに戻ります t select from users u001 yamada アライメント制御 a a を実行すると select の結果でカラムの一番長い文字数に合わせてアライメントしなくなります もう一度 a を実行するとアライメントモードに戻ります a select from users id name u001 yamada カンマ表示 fieldsep a でアライメント無しモードにして pset fieldsep をカンマ に指定すると カラムをカンマ 区切りで表示することができます a pset fieldsep select from users id name u001 tanaka ページャ表示 pager レコード数が多いと select の結果が more でページャ表示されますが 下記でページャ表示の有無を切り替えることができます pset pager off pset pager on htmlモード h h を実行すると select の結果を htmlモードで表示します もう一度 h を実行すると通常モードに戻ります h select from users table border 1 tr th align center id th th align center name th 変数 変数の一覧を表示する set set 変数を設定する set set user_id u001 変数を表示する echo echo user_id 変数を使用する name 数値として参照したいときは user_id 文字列として参照したいときは user_id とします select from users where id user_id その他 外部ファイルを読み込む i i file ヘルプ h h で select などのコマンドのヘルプ で dt などのバックスラッシュコマンドのヘルプを表示することができます h コマンド一覧 h select コマンドのヘルプ バックスラッシュコマンドの一覧 options psqlコマンドオプションの一覧 variables 初期設定ファイル psqlrc psqlrc ファイルにコマンドを記述しておくと ログイン時に自動実行してくれます cat psqlrc eof set search_path to mychema pset pager off eof 自動インクリメント serial serial 型のカラムは insert する度に自動インクリメントされるシーケンス番号を保持することができます create table users id serial primary key name text insert into users name values yamada insert into users name values tanaka select from users id name 1 yamada 2 tanaka 2 rows 下記の様にしてシーケンス番号を確認したり変更したりできます select currval pg_catalog pg_get_serial_sequence users id select from users_id_seq select setval users_id_seq 100 true serial は 32ビット長のため これよりも大きなインデックスを使用する場合は bigserial を使用します create table users id bigserial primary key name text ただし serial や bigserial は postgresql 独自の機能のため 現在は後述の identity の方が推奨されています 自動インクリメント identity postgresql 10 以降では sql 標準である generated always by default as identity が使用可能となりました create table users id int primary key generated always as identity name text create table users id int primary key generated by default as identity ...
|