PostgreSQLエラー「'psql' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」の原因と解決方法

コマンドプロンプトでpsqlを実行しようとした時に、

'psql' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

というエラーに遭遇する時がある。

以下は、ユーザ「r_nobu」でWindows XPにログインし、[スタート]→[ファイル名を指定して実行]→「cmd」と入力し、[OK]をクリックして起動したコマンドプロンプト画面でpsqlを実行した例。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\r_nobu>psql -U postgres
'psql' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

この場合、PostgreSQLのコマンド「psql」の「PATH(パス)」が通っていないことが原因。

上記の例の場合、コマンドを実行している現在のフォルダが「C:\Documents and Settings\r_nobu」という場所なのだが、この「r_nobu」というフォルダ内には「psql」のコマンドを実行するためのプログラムなどは入っていない。

「PATH(パス)」を通していれば、このような事態はないのだけれど、何らかの事情で通していないのであれば仕方がない。「PATH(パス)」を通さずにどうしてもpsqlを使いたいのであれば、以下のようにpsqlを実行できる場所(つまり、PostgreSQLのインストールフォルダのbinフォルダ内)まで移動してやればよい。

C:\Documents and Settings\r_nobu>cd "c:\Program Files\PostgreSQL\8.4\bin"

C:\Program Files\PostgreSQL\8.4\bin>psql -U postgres
psql (8.4.2)
"help" でヘルプを表示します.

postgres=# help ※PostgreSQLのhelpを表示するコマンド
これは psql : PostgreSQL へのコマンドライン・インターフェースです。
\copyright とタイプすると、配布条件を表示します。
\h とタイプすると、SQL コマンドのヘルプを表示します。
\? とタイプすると、psql コマンドのヘルプを表示します。
\g と打つかセミコロンで閉じると、クエリーを実行します。
\q で終了します。

postgres=# select version(); ※PostgreSQLのバージョンを表示するSQL
version
-------------------------------------------------------------
PostgreSQL 8.4.2, compiled by Visual C++ build 1400, 32-bit
(1 行)

postgres=# select now(); ※現在日時を表示するSQL
now
---------------------------
2010-11-11 02:02:21.14+09
(1 行)

postgres=# \q ※PostgreSQLを終了するコマンド

なお、PostgreSQLのインストールフォルダのbinフォルダ内(Windows版PostgreSQL 8.4の標準では「c:\Program Files\PostgreSQL\8.4\bin」)のファイル一覧をコマンドプロンプトで眺めると以下の通り。

C:\Program Files\PostgreSQL\8.4\bin>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は F8E9-E3DB です

C:\Program Files\PostgreSQL\8.4\bin のディレクトリ

2010/01/18 01:10 <DIR> .
2010/01/18 01:10 <DIR> ..
2009/12/10 20:30 81,920 clusterdb.exe
2009/04/13 21:23 12,288 comerr32.dll
2009/12/10 20:30 68,608 createdb.exe
2009/12/10 20:30 74,240 createlang.exe
2009/12/10 20:30 86,016 createuser.exe
2009/12/10 20:30 66,048 dropdb.exe
2009/12/10 20:30 90,112 droplang.exe
2009/12/10 20:30 65,536 dropuser.exe
2009/12/10 20:37 688,128 ecpg.exe
2009/04/13 21:23 135,168 gssapi32.dll
2006/05/04 05:57 888,832 iconv.dll
2009/12/10 20:28 106,496 initdb.exe
2009/04/13 21:23 19,968 k5sprt32.dll
2009/04/13 21:23 634,880 krb5_32.dll
2009/04/13 23:09 1,032,192 libeay32.dll
2009/01/06 23:51 968,886 libiconv-2.dll
2009/01/06 23:51 83,906 libintl-8.dll
2009/12/10 20:28 172,032 libpq.dll
2009/02/13 04:01 976,384 libxml2.dll
2008/09/15 05:10 166,400 libxslt.dll
2008/04/08 23:13 348,160 msvcr71.dll
2009/12/10 20:33 49,152 oid2name.exe
2009/12/10 20:48 11,173,888 pgAdmin3.exe
2009/12/10 20:33 73,728 pgbench.exe
2009/12/10 20:28 48,640 pg_config.exe
2009/12/10 20:28 47,104 pg_controldata.exe
2009/12/10 20:29 66,048 pg_ctl.exe
2009/12/10 20:29 299,008 pg_dump.exe
2009/12/10 20:29 163,840 pg_dumpall.exe
2009/12/10 20:37 86,016 pg_regress.exe
2009/12/10 20:37 86,016 pg_regress_ecpg.exe
2009/12/10 20:29 65,536 pg_resetxlog.exe
2009/12/10 20:30 147,456 pg_restore.exe
2009/12/10 20:34 40,960 pg_standby.exe
2009/12/10 20:27 4,521,984 postgres.exe
2009/12/10 20:29 352,256 psql.exe
2009/12/10 20:31 69,120 reindexdb.exe
2009/04/13 23:09 212,992 ssleay32.dll
2009/12/10 20:54 1,548,288 stackbuilder.exe
2009/12/10 20:30 52,224 vacuumdb.exe
2009/12/10 20:35 34,816 vacuumlo.exe
2009/12/10 20:35 90,112 zic.exe
2005/07/20 19:48 59,904 zlib1.dll
43 個のファイル 26,055,288 バイト
2 個のディレクトリ 18,290,790,400 バイトの空き領域

PostgreSQLのPATH(パス)は気が向いたら通すかも。

前へ

PostgreSQLエラー「number of page slots needed (20208) exceeds max_fsm_pages (20000)」の原因と解決方法

次へ

Windows環境でPostgreSQL 8.4のPathを通す方法