参照スキーマを変更するちょっと準備として、fooとpublicという2つのスキーマがあり、今はpublicを選択したいる状態というにします。<スキーマ名>を実行するだけです。INTO文を使い以下のような形でデータを挿入できます。括弧の中のカラム名の並びとそのデータとなる値は同じ位置に置く必要があります。...);values以下は,でつなげて書くことにより一度に複数レコードを挿入することができます。VALUESが使えます。(update)UPDATE文を使い以下のような形でデータを挿入できます。fooに更新してしまいます。更新データを絞り込むにはwhereを使うことができます。1;これでidが1のものだけを更新することができます。複数カラムを一度に更新したい場合はset以下の値の代入部分を,で繋げることで可能です。FROM文を使い以下のような形でデータを削除できます。table_name;これもUPDATEのようにそのままだと、そのテーブルのレコードすべてが対象になってしまうのでWHEREで絞ることができます。1;これでidが1のものだけを削除することができます。KEY、REFERENCESなどの制約を設定できます。(condition)のように書け、conditionがtrueなデータだけ登録するように制限できます。以下は、numberへは1以上の値しか入れれないという制限を設定してます。その条件を満たさないものを入れようとするとエラーが起こります。"example_check_number_check"エラー文にある通りこの制約名はデフォルトで<table_name>_<column_name>_checkです。UNIQUE単にUNIEUQを置いて設定します。これを設定したカラムの値は全レコード全てで異なる値でなければなれないという制限ができます。以下は、numberへ1を2回入れようとしたためエラーが起きています。"example_unique_number_key"エラー文にある通りこの制約名はデフォルトで<table_name>_<column_name>_keyです。KEY単にUNIEUQを置いて設定します。そのテーブルでの主キーを設定できます。こちらもユニークと同じようにユニークである必要があります。"example_primary_key_pkey"エラー文にある通りこの制約名はデフォルトで<table_name>_pkeyです。...)のように書き、外部テーブルとの関連した値を安全に記録する為に使います。制約名はデフォルトで<table_name>_<column_name>_fkeyです。例を見る前に以下で、外部テーブルとして使うテーブルを作っておきます。KEY);それを使うテーブルを以下のように作ります。example_references_parent(id));まだexample_references_parentにはレコードは1つもありません。"example_references1_parent_id_fkey"エラーになります。これはparent_idへ入れられる値は、example_references_parentに実在するあるid値である必要がある為です。このエラーは先にそのような値を入れておくことで回避できます。1参照テーブルにidが1のレコードを入れたので、先程エラーになったものをもう1度試してみます。1今度は大丈夫でした!そしてこの状態で参照側のレコードを消してみます。"example_references1"が、この制約がちゃんと付いてると参照されているレコードは上記のようなエラーがでて消すことができなくなります。これを回避するには先に参照しているレコードを消す必要があります。1もし、参照してる値がとても多い場合これでは不便かもしれません。上記の削除の動作を1度に行える方法があります。CASCADEを付けます。TABLE先程消してしまった参照テーブルと今作ったテーブルに値を入れておきます。1この状態だと参照元データを削除できます。CASCADEによって、参照元が削除された時にそれを参照しているレコードも削除するように設定した為です。CASCADEも一緒に設定してました。これは参照元の値が更新された時に、それを参照しているレコードの値も更新されます。1をせずに一度に終わらせるものです。以下のようにfooテーブルを作っておきます。TABLE実際に確認まず、普通にinsertした時はこうなります。「1件追加しました」という情報だけ返っています。*を追加すると今入れたレコードが返るようになります。...のカラム指定と同じように指定できます。したがって、カラム名を指定すればそれだけを返すようにできます。1中からシェルコマンドを実行する\!の後ろにシェルコマンドを書いて実行します。foo.txtvimなどもちゃんとエディターが開いてくれます。.sqlファイルの実行は\iという便利なコマンドがあるのでそちらを使ったほうがいいと思います。<file_path>を実行するだけです。sqls/hoge.sqlで実行するとすると楽かもしれません。--variableオプションを使います。その後key=valueの形で設定していきます。設定した値は.sqlファイルの中で:keyと:を頭に付けて参照できます。TABLEこの内容が書かれている.sqlファイルは、schemaという変数を定義した上で実行されることを期待しています。流すコマンドは以下です。TABLEちゃんとできていればいい感じです。--commandオプションを使います。psql内部で使えるコマンドを書きます。row)カラムを縦並びで表示psql内部では\xコマンドでカラムの縦・横並びを切り替えできました。--expandedオプションで切り替えられます。1ダンプとリストアダンプダンプにはそれ用のコマンドpg_dumpがありこれでダンプファイルの作成ができます。これの接続時のオプションなどはpsqlと同じです。以下でoutput.sqlにダンプできます。接続情報にはpostgres://スキーマを使うこともできます。output.sqlリストアダンプされたファイルはそのままpsqlで扱える形なので、シェルのリダイレクションで取り込むことができます。databaseがない場合は先に作っておきます。output.sqlクエリを一定時間毎に実行\watchコマンドを使います。文を2秒毎に実行してくれます。watchコマンドを確認するターミナルを2つ開いて以下のようにして見てみます。テーブルはfooという名前のものを使います。テーブルに3秒毎にinsertするテーブルの最新1件を2秒毎に表示する準備とりあえず以下でfooを作ります。null);1番目の方では以下でinsertを走らせます。3で3秒毎走らせるということになります。32番目の方では以下でselectを走らせます。2これで3秒毎に新しいidのデータが増えていくので、その度selectで取得するデータも変わるはずです。左側には1,2回毎に新しいレコードが表示されています。(\xで縦表示にしています)色々と結果を見ながらいじりたい時に便利だと思います。valueを使います。以下でtablenameにpostsという値を設定しています。posts設定できたかどうかは\setと実行します。最後に出てくるはずです。中で使えなかったので、避けたほうがいいかもしれないです。nameで削除できます。塊を作ることができます。RAISEはトランザクション時に予期せぬ事が起こったときに使うものみたいですが、これを使ってログみたいな情報を流せるみたいですね。cDO環境変数PGHOST-hオプションと同様に接続先のホストを指定できます。psqlPGPORT-pオプションと同様に接続先のホストを指定できます。psqlPGUSER-Uオプションと同様に接続先のホストを指定できます。psqlPGPASSWORDpsqlコマンドを実行した時にパスワードを聞かれずにログインすることができます。postgres.config/fish/config.fishに以下のように書くとpsqlだけで接続できるようになります。''クエリの実行にどれだけかかっているか調べる\timingコマンドを先に実行します。msのようにかかった時間も表示しれくれるようになります。以下のサブクエリは、barテーブルからvalueがnju33なレコードfoo_idを返します。それが33だった場合、以下のように展開されます。33;またwith構文を使う方法もあります。joinするという意味になる。この結果は以下のようになります。使うと、結果のある列のデータから演算を行い単一の結果を受け取ることができます。集約関数には、AVGCOUNTMAXMINSUMなどあります。以下のようなデータが入ってるsandboxデータベースで動作を見ていきます。981AVGAVGは列データの平均値を求めます。490.1250000000000000COUNTCOUNTは列データの個数を求めます。MINMAXは列データの中での最大値、MINは最小値を探します。123SUMSUMは列データすべての合計値を求めます。