psqlとは?
psqlとは、PostgreSQLの対話型操作をおこなうフロントエンドインターフェイスを指します。インタラクティブにユーザの入力をPostgreSQLに引き渡し、結果を表示します。psqlはCUIツールですが、GUIツールとしてはpgAdminが用意されています。
psqlはインタラクティブなコマンド入力の他、ファイルから入力することも可能です。そのため、スクリプトのファイル作成によりDB操作の自動化が可能です。
PostgreSQLとは?
PostgreSQLは、IllustraやInformixの流れをくむRDBMSです。最新版はPostgreSQL 13で、psqlにも多くの改良がされています。PostgreSQLは他のオープンソースソフトウェアに見られる無償(無料)版と有償版の同時ラインナップや、有料サポートの考えがないので完全無料と言えます。
PostgreSQLはオープンソースソフトウェアのRDBMSとしてMySQLに次いで2番目の人気を誇り、RDBMS全体では4番目のランキングとなります。またPostgreSQLの利用者は近年増加をしており、3位のポジションに届く勢いがあります。 参考:DB-Engines Ranking of Relational DBMS
稼働プラットフォームはmacOS Serverのデフォルトデータベースであり、さらにLinux系システム、Windowsなど多岐に渡ります。PostgreSQLは比較的小規模から中規模のシステムの実績が多いです。しかしながらバージョンアップを重ねるにつれて性能スケーラビリティが改善しており、小規模から大規模システムで用いられています。
PostgreSQLとMySQLの違い
MySQLは、オラクル社が提供するオープンソースソフトウェアのRDBMSです。MySQLは商用RDBMSであるOracle Databaseに次いで2番目の人気を誇り、オープンソースRDBMSでは長い間No1ポジションを維持しています。
PostgreSQLとMySQLは、ユーザがどちらか一方を選択する傾向があります。それぞれの選択理由についてPostgreSQLとMySQLの違いと特徴から判断していきます。
・MySQLの選択理由 MySQLは独自拡張がなく、シンプルです。そのため軽量でスピードが速い特徴があります。また、ユーザが多いためにコミュニティや情報共有が多数されています。これにより、高品質なシステム構成が簡単に構築できます。
MySQLはオープンソースで全体のソフトウェアスタックを構成する場合のソフトウェアスタックLAMPの構成コンポーネントです。LAMPで構成することで、より実績のある安定したシステム構築が可能です。LAMPはLはLinux(OS)、AはApach(ウェブサーバ)、MはMySQL(データベース管理システム)、PはPerl・PHP・Python(プログラム開発言語)を指します。
・PostgreSQLの選択理由 PostgreSQLはRDBMSとしてだけでなく、オブジェクト指向のORDBMSとしても利用できます。オブジェクトの継承や定義が利用できますので、従来処理できなかったデータにも利用できます。さらに複雑なクエリに対応しますので、高度な検索処理が可能です。
加えてPostgreSQLはデータベースのサイズに制限がないため、理論的には超大規模なデータベース管理も可能です。これらの違いと特徴から利用者ニーズにより、求めるRDBMSが選択されています。
psqlの使い方
psqlを使うには、PostgreSQLのダウンロード・インストールが必要です。接続先のPostgreSQLがインストールされると、psqlが使用可能となります。psqlを使う場合は、WindowsのコマンドプロンプトやLinuxのシェル、macOSのターミナルを起動し、psqlを実行します。
PostgreSQLのインストール方法
PostgreSQLのインストールは、公式ダウンロードサイトからモジュールをダウンロードしインストールします。日本語の情報を見ながらインストールする場合は、日本PostgreSQLユーザ会のダウンロードサイトにリンク先が掲載されています。 参考:PostgreSQL Downloads 参考:日本PostgreSQLユーザ会 ダウンロード
インストール時はWindows版はEDBによるインストーラパッケージを、Linuxの場合はディストリビューションに合わせたリポジトリリンクが提供されています。
インストール時にはインストール可能なモジュールが表示されますが、全て選択しておきましょう。誤って「Select Components」でCommand Line Toolsのチェックを外してしまうと、psqlがインストールされません。そのため、再度Command Line Toolsのインストールが必要です。
次に、インストール時に管理者パスワードとPostgreSQL通信ポートを設定します。加えて「Default Locale」で”Japanese, Japan”を選択すると日本語が利用できます。
psqlからPostgreSQLへの接続方法
psqlからPostgreSQLへ接続するには、WindowsのコマンドプロンプトやLinuxのシェル、macOSのターミナルを起動し、psqlを実行します。
使用方法: psql [オプション...] [データベース名 [ユーザ名]]
データベース名をオプション指定する場合は、”-d”で指定します。同様にユーザ名をオプション指定する場合は、”-U”で指定します。ユーザ名を未指定の場合はデフォルトユーザが使用されます。 リモートノードで稼働するPostgreSQLに接続する場合は、”-h”でホスト名を指定します。ポート番号をデフォルトの5432から変更した場合は”-p”で指定してください。
接続が正常に処理されると、プロンプトとして”postgres=#”のように”データベース名=#”が表示されます。終了時は”\q”と入力します。 参考:PostgreSQL 9.3文書 psql
psqlのオプション
その他、代表的なオプションを説明します。
・スクリプト処理で用いるオプション スクリプト処理で処理を記録する場合は”-a”を指定することで、読み込んだすべての行を標準出力に表示できます。
・コマンドの入出力ファイルを指定するオプション ”-f ファイル名”を指定すると、ファイル名からコマンドを入力し、処理を行います。さらに”-o ファイル名”で出力をファイル名に書き込みます。
・シェルスクリプトで単一の処理を行うオプション “-c コマンド”を指定すると、単一のコマンド処理を行い終了します。
psqlのコマンド
psqlのコマンドはSQLコマンドおよびメタコマンドが使用できます。
SQLのマンドはDB操作のコマンドですので、DB操作言語のSQLに従います。DBの作成はCREATE DATABASE、DBの削除はDROP DATABASEを用います。DBの表示はSHOW DATABASESではなく、”\l”または”\l+”を用いるか、SELECT文でpg_databaseのデータを表示します。
次にテーブル(表)の作成はCREATE TABLE、テーブルが作成できたらデータを格納します。テーブル表示やテーブル一覧はSHOW TABLESではなく、”\d”または”\dt”。データの格納はINSERTです。次にデータ参照はSELECTを、データ更新はUPDATEを用います。データの削除はDELETEで行います。
上記ポイントを整理します。PostgreSQLのSHOWは独自拡張したもので、実行時パラメータの値を表示する機能です。そのため従来他のDBMSで使用したSQL文のSHOWとは異なることを覚えておきましょう。他のDBMSでSHOWで表示した情報はPostgreSQLではメタコマンドまたはSELECTで行います。 以下に簡単にポイントをまとめておきます。
・データベースの一覧表示(SHOW DATABASESに相当) ”\l”、または”\I+”、または SELECT datname FROM pg_tables;
・テーブル一覧の表示(SHOW TABLESに相当) ”\dt スキーマ名.*”、または SELECT schemaname, tablename, tableowner FROM pg_tables;
・テーブル・ビュー・インデックス・シーケンス・外部テーブルの一括表示 \d[S+] [パターン] パターンに一致するテーブル・ビュー・インデックス・シーケンス・外部テーブル、または複合型における全ての列・列の型・テーブル空間などの特別な属性を表示します。
その他メタコマンドで表示に関する代表的な指定は以下の通りです。 ・外部テーブルの表示 ”\dE[S+] [パターン]” ・インデックスの表示 ”\di[S+] [パターン]” ・マテリアライズドビューの表示 ”\dm[S+] [パターン]” ・シーケンスの表示 ”\ds[S+] [パターン]” ・ビューの表示 ”\dv[S+] [パターン]”
psqlのメタコマンドやオプションの詳細はレファレンスマニュアルをご確認ください。 参考:PostgreSQL 9.3文書 psql
PostgreSQLの特徴を理解し、psqlを用いてデータベースを活用しましょう
PostgreSQLはオブジェクト指向データベースとしての利用や、容量無制限のデータベースサイズ・複雑なクエリに他のRDBMSとの違いや特徴があります。このPostgreSQLの特徴を理解し知識を吸収するには、PostgreSQLのデータベースにpsqlでアクセスして確認することをおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから