えー来月(2020年3月)より、postgresを使うかもしれないので、ちょっと復習を。
以前のリンク
今までMySQLが95%だったので、主にMySQLとの違いから。
基本コマンド比較
すごくわかりやすい表があったので、リスペクトも込めてリンクを。
一応自分なりのメモも
超頻出系
1 2 3 4 5 6 7 8 9 10 |
¥l DB一覧 ¥c DB名 DB選択(use DB) ¥d テーブル一覧 ¥d table名 テーブル定義 ¥du MySQLでいうユーザー一覧 ¥x select文の結果を縦列で表示。(select文ごとにつけるのではなく、一度入れるとずっと継続。切る場合はもう一度¥x) pg_dump -Ft データベース名 > データベース圧縮ファイル(tar.gz) #ダンプ(テキストではないので注意) pg_dump -U ユーザー -d データベース名 --column-inserts(insert文を出したい時) > sample.sql(データベースのSQL) pg_dump -U ユーザー --table テーブル名 データベース名 --column-inserts(insert文を出したい時) > sample.sql(テーブルのSQL) pg_restore -c -U ユーザー名 -d データベース名 < データベース圧縮ファイル(tar.gz) #リストア オプションcでデータベース削除 |
その他
- MySQLでいうユーザーはPostgresではロールという概念が違いです(以前はグループとユーザーがあり、これをまとめた概念のようです)。
- ディフォルトでpostgresというデータベース、ロールがあります。rootユーザー的なものかと。
- postgresはログインすると左側がデータベースになります。
例えばpsql -U postgres -d post_code_dbといったコマンドを入力すると下記のようになります。
post_code_db=#
テーブル比較
これまたわかりやすいリンクがあったので貼ります。
一応補足しますと下記のような特徴があります。
- intの幅定義(int(11)など)ができない
- 頻出のものの中ではtinyint,datetimeがない
- 数値定義の際のunsignedがない
- サロゲートキーのオートインクリメントがなく、シーケンステーブルを使う必要がある。
- サロゲートキーは id SERIAL PRIMARY KEY などと設定すると自動でシーケンステーブルまで設定できる。
- カラムの範囲が全体的に大きめ。
CHECK構文(型制御、例えば1〜12のみ、など)が使える
SELECT文
分析、集合系の構文で使えるものが多々あります。
全体的にソート系のアルゴリズムが優れています。
dockerでの環境変数など
ちなみにdockerで環境変数を作るときにpostgresの環境を以下のように作ることが多いと思いますが、
1 2 |
environment: - POSTGRES_USER=postgres |
これですとデフォで
role,ownerが postgres
になります。設定していない場合このようになるようです。
また
1 2 3 |
environment: - POSTGRES_DB=sampledb - POSTGRES_USER=dbuser |
のように設定した場合、
デフォで
role,ownerが dbuser になり、 sampledb ができています。
postgresのrole,ownerがない・・、ログインできないって焦らないようにしましょう。(私w)