• ベストアンサー

PostgreSQLのpsqlでユーザの扱いがうまくいかない

こんにちは ただいま、PostgreSQL7.2.3をインストール(Redhat7.3)し、これからpsqlを使い、SQL操作をしようとしていたところですが、psqlと入力すると "psql: FATAL 1: Database "postgres" does not exist in the system catalog."となります。 PostgreSQLのユーザは "postgres","nobody"です。 現在、postgresからpostmaster -Sで起動しています. 下記に端末で行った作業内容をコピーしてみました。 今回インストールの参考にした書籍は"PHPxPostgreSQLで作る最強Webシステム」石井達夫著です。この本の手順に従ったつもりですが、うまくいきません。 [postgres@www root]$ postmaster -S [postgres@www root]$ psql -l List of databases Name | Owner | Encoding -----------+----------+---------- php | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (3 rows) [postgres@www root]$ select dtname from php bash: syntax error near unexpected token `from' [postgres@www root]$ select dtname from template0 bash: syntax error near unexpected token `from' [postgres@www root]$ [postgres@www root]$ psql select dtname from php psql: warning: extra option from ignored psql: warning: extra option php ignored psql: FATAL 1: Database "select" does not exist in the system catalog. [postgres@www root]$ psql -l List of databases Name | Owner | Encoding -----------+----------+---------- php | postgres | EUC_JP template0 | postgres | EUC_JP template1 | postgres | EUC_JP (3 rows) [postgres@www root]$ psql psql: FATAL 1: Database "postgres" does not exist in the system catalog.

質問者が選んだベストアンサー

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

う~ん。。これは勘違いだらけですね(^^; > psqlと入力すると "psql: FATAL 1(snip) ただ単に、psqlとだけ入力すれば、そのユーザー名と同じ名前のDBが選択されたことになります。 つまり、 psql -n postgres と、DB名「postgres」が選択され、「そんなDBはないよ~」と言うエラーが出ているだけです。 > PostgreSQLのユーザは "postgres","nobody"です。 まあ、この辺りは、もう少し理解を深めればnobodyじゃなくなると思いますが、今のところこれでいいでしょう。。 (私も開発サーバーはnobodyのまま(^^;) > 現在、postgresからpostmaster -Sで起動しています. その本はいつの本ですか? # おそらくバージョン6.5以前の本だと思いますが… 間違いではないですが、postmasterを直接コールするよりも、pg_ctlコマンドを使った方がいいですよ。 > [postgres@www root]$ psql -l これの後に、ちゃんとリストが表示されているので、DB自体は起動できています。 > [postgres@www root]$ select dtname from php これ以下は、その名前のDBを立ち上げてから行います。 つまり、 [postgres@www root]$ psql -n php と入力すると、 Welcome to psql, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit php=# と表示されます。 そこで先のコマンドを入力すればOKです。 と、ものすごく初心者のようですが、最初は誰でも初心者です。 頑張ってください!

hooma
質問者

お礼

ありがとうございました。 勘違いだったんですね. おっしゃるとおりにしてみたら、ちゃんと動いていました.私のあたまが動いていませんでした。

その他の回答 (2)

  • ojin
  • ベストアンサー率43% (280/638)
回答No.2

あまり当てにしないでください。だいぶ忘れかけています。 postgresユーザで、環境変数などの設定は問題ないですよね! .bash_profile export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export PGDATA=$POSTGRES_HOME/data export MANPATH="$MANPATH":$POSTGRES_HOME/man export LD_LIBRARY_PATH="LD_LIBRARY_PATH":"$PGLIB" を追加して、 $ source ~/.bashrc を実行する。 データベースの初期化 $ initdb Success. You can now start the database server using: できれば、Regressテストを行う。 $ postmaster -S $ cd /usr/local/src/postgres-7.2.3/src/test/regress $ make all runtest いくつかのSQLステートメントに故意にエラーをつくってあるので、エラーが発生します。 ちょっとダウンレベルのPSQLですので、多少異なるかも知れません。参考までに。 今日はこれで、寝ます。 あくまでも、参考例で、どのような場所に、PostgreSQLを導入したかで、ディレクトリィーは異なります。

hooma
質問者

お礼

ありがとうございました。 おっしゃる内容のテストをしましたら下記のような結果になりました。 これでOKでしょうか。 [postgres@www postgres]$ cd /usr/local/src/postgresql-7.2.3/src/test/regress [postgres@www regress]$ make all runtest sed -e 's,@bindir@,/usr/local/pgsql/bin,g' \ -e 's,@libdir@,/usr/local/pgsql/lib,g' \ -e 's,@pkglibdir@,/usr/local/pgsql/lib,g' \ -e 's,@datadir@,/usr/local/pgsql/share,g' \ -e 's/@VERSION@/7.2.3/g' \ -e 's/@host_tuple@/i686-pc-linux-gnu/g' \ -e 's,@GMAKE@,make,g' \ -e 's/@enable_shared@/yes/g' \ -e 's/@GCC@/yes/g' \ pg_regress.sh >pg_regress chmod a+x pg_regress gcc -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -fpic -I../../../src/i nterfaces/libpq -I../../../src/include -c -o regress.o regress.c gcc -shared -o regress.so regress.o sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' input/copy.source >sql/copy.sql sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' input/create_function_1.source >sql/create_function_1.sql sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' input/create_function_2.source >sql/create_function_2.sql sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' input/misc.source >sql/misc.sql sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' input/constraints.source >sql/constraints.sql sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' output/copy.source >expected/copy.out sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' output/create_function_1.source >expected/create_function_1.out sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' output/create_function_2.source >expected/create_function_2.out sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' output/misc.source >expected/misc.out sed -e 's,@abs_srcdir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's ,@abs_builddir@,/usr/local/src/postgresql-7.2.3/src/test/regress,g' -e 's/@DLSUF FIX@/.so/g' output/constraints.source >expected/constraints.out make -C ../../../contrib/spi REFINT_VERBOSE=1 refint.so autoinc.so make[1]: 入ります ディレクトリ `/usr/local/src/postgresql-7.2.3/contrib/spi' gcc -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -fpic -DREFINT_VERBOSE -I. -I../../src/include -c -o refint.o refint.c gcc -shared -o refint.so refint.o gcc -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -fpic -DREFINT_VERBOSE -I. -I../../src/include -c -o autoinc.o autoinc.c gcc -shared -o autoinc.so autoinc.o rm refint.o autoinc.o make[1]: 出ます ディレクトリ `/usr/local/src/postgresql-7.2.3/contrib/spi' /bin/sh ./pg_regress --schedule=./serial_schedule --multibyte=EUC_JP (using postmaster on Unix socket, default port) ============== dropping database "regression" ============== ERROR: DROP DATABASE: database "regression" does not exist dropdb: database removal failed ============== creating database "regression" ============== CREATE DATABASE ============== dropping regression test user accounts ============== ============== installing PL/pgSQL ============== ============== running regression test queries ============== test boolean ... ok test char ... ok test name ... ok test varchar ... ok test text ... ok test int2 ... ok test int4 ... ok test int8 ... ok test oid ... ok test float4 ... ok test float8 ... ok test bit ... ok test numeric ... ok test strings ... ok test numerology ... ok test point ... ok test lseg ... ok test box ... ok test path ... ok test polygon ... ok test circle ... ok test date ... ok test time ... ok test timetz ... ok test timestamp ... ok test timestamptz ... ok test interval ... ok test abstime ... ok test reltime ... ok test tinterval ... ok test inet ... ok test comments ... ok test oidjoins ... ok test type_sanity ... ok test opr_sanity ... ok test geometry ... ok test horology ... ok test create_function_1 ... ok test create_type ... ok test create_table ... ok test create_function_2 ... ok test copy ... ok test constraints ... ok test triggers ... ok test create_misc ... ok test create_aggregate ... ok test create_operator ... ok test create_index ... ok test inherit ... ok test create_view ... ok test sanity_check ... ok test errors ... ok test select ... ok test select_into ... ok test select_distinct ... ok test select_distinct_on ... ok test select_implicit ... ok test select_having ... ok test subselect ... ok test union ... ok test case ... ok test join ... ok test aggregates ... ok test transactions ... ok test random ... ok test portals ... ok test arrays ... ok test btree_index ... ok test hash_index ... ok test privileges ... ok test misc ... ok test select_views ... ok test alter_table ... ok test portals_p2 ... ok test rules ... ok test foreign_key ... ok test limit ... ok test plpgsql ... ok test temp ... ok ====================== All 79 tests passed. ====================== rm regress.o

  • masakin
  • ベストアンサー率59% (32/54)
回答No.1

データベース名を指定しないといけません。 $psql [database名] ですので、データベースphpを使用したいのでしたら、 [postgres@www root]$psql php となるわけです。 select文にはデータベース名ではなくテーブル名を指定してやれば問題ありません。 また、SQL文の最後は「;(セミコロン)」で閉じてください。

関連するQ&A