はじめに
今回PostgreSQLを学ぶにあたってメタコマンドというものが出てきたため、SQL*Plus(Oracle)との対応一覧表があったらいいなぁという思いからまとめてみました。
またメタコマンドだけでなく、よく使いそうor遭遇しそうな違いについても同時に記載しています。
目次
1. ツール起動と接続・終了
2. データベース・スキーマ情報、セッション情報の確認
3. SQL構文・関数の主な違い
4. 運用管理・その他
5.まとめ
コマンドに記載されている \ は¥マークと同じです
1. ツール起動と接続・終了
データベースへの接続と終了のコマンドです。
| 操作内容 | PostgreSQL (psql) | Oracle (SQL*Plus) |
|---|---|---|
| ツール起動と接続 | psql -U ユーザ名 -d DB名 -h ホスト名 |
sqlplus ユーザ名/パスワード@ホスト:ポート/サービス名 |
| ツールを終了する |
\q または exit
|
exit または quit
|
| ヘルプを表示する |
\? (psqlヘルプ) / \h (SQLヘルプ) |
help index |
2. データベース・スキーマ情報、セッション情報の確認
オブジェクトの構造や一覧を確認するコマンドです。PostgreSQLはメタコマンド(\から始まるコマンド)を多用するのに対し、Oracleはデータディクショナリ(メタデータが格納されたビュー)を検索するのが基本です。
| 操作内容 | PostgreSQL (psql) | Oracle (SQL*Plus) |
|---|---|---|
| テーブル一覧を表示 |
\dt(display tablesの頭文字) |
SELECT table_name FROM user_tables; |
| ビュー一覧を表示 |
\dv(display viewsの頭文字) |
SELECT view_name FROM user_views; |
| テーブル定義を確認 |
\d テーブル名(describe [テーブル名]の頭文字) |
DESC テーブル名 または DESCRIBE テーブル名
|
| インデックス一覧を確認 |
\di(display indexesの頭文字) |
SELECT index_name FROM user_indexes; |
| スキーマ/ユーザー一覧1 |
\dn(display namespacesの頭文字) |
SELECT username FROM all_users; |
| テーブルスペース一覧2 |
\db(databaseとtablespace の頭文字) |
SELECT tablespace_name FROM dba_tablespaces; |
| 現在の接続情報を確認 |
\conninfo(connection informationの略) |
SHOW user / SELECT global_name FROM global_name;
|
| データベース(インスタンス)一覧3 |
\lまたは\list
|
(Oracleは基本1DBのため一覧取得の概念なし) |
| 実行中のプロセス・セッション |
SELECT * FROM pg_stat_activity;(メタコマンドなし) |
SELECT * FROM v$session; |
3. SQL構文・関数の主な違い
日常的に使うSQLや関数のうち、よく遭遇する違いです。
| 操作内容 | PostgreSQL (psql) | Oracle (SQL*Plus) |
|---|---|---|
| テーブルを伴わない値の取得 |
SELECT NOW();(FROM不要) |
SELECT SYSDATE FROM DUAL;(DUALが必要) |
| 取得件数の制限 (Top N) | SELECT * FROM tbl LIMIT 10; |
SELECT * FROM tbl FETCH FIRST 10 ROWS ONLY;(Oracle 12c以降) |
| NULLの置換 |
COALESCE(val, '代替')(引数3つ以上も可) |
NVL(val, '代替')(引数2つ) または COALESCE(引数3つ以上も可) |
| 外部結合の特殊構文 | 左右結合(ANSI標準のみ) |
(+) 演算子(Oracle独自)も使用可能 |
Nullの取り扱いについて
Oracleでは自動的に空文字("")を nullに変換しますが、PostgreSQLでは空文字("")は「長さ0の文字列」、nullは「null」とそれぞれ別の値として扱われます。
4. 運用管理・その他
トランザクションの挙動や、外部ファイルの実行方法です。
| 操作内容 | PostgreSQL (psql) | Oracle (SQL*Plus) |
|---|---|---|
| 外部SQLファイルの実行 |
\i ファイル名.sql(include [ファイル名]の頭文字) |
@ファイル名.sql または @@ファイル名.sql
|
| 自動コミット (デフォルト) | ON(明示的に BEGIN が必要) |
OFF(明示的に COMMIT が必要) |
| コマンド結果をファイル出力 |
\o 出力先ファイル名(output[出力先ファイル名]の頭文字) |
SPOOL 出力先ファイル名 ~ SPOOL OFF |
5. まとめ
よく使いそうなコマンドをまとめてみましたが、
ちょっと調べてみただけでも書き方が全然違って驚きました。
特にnullの扱いのあたりはつまずきポイントだと思うので、気を付けて使用したいです。
記載したもの以外にもたくさんのコマンドや違いがあると思うので、
慣れているツールと照らし合わせながら楽しんで覚えていけたらいいなと思います。
参考資料
SQL*Plus®ユーザーズ・ガイドおよびリファレンス リリース11.2
PostgreSQL 15.4文書