説明

ここでは、pgAdminのマスターパスワードを変更する方法を紹介します。

 

あわせて読みたい

postgresユーザーのパスワードを忘れてしまった場合の手順はこちらです。

https://postgresweb.com/forget-the-password-for-postgres-user

 

 

そもそもマスターパスワードっていつ入力?

私だけかもしれないですがマスターパスワードっていつ設定したっけ?と思いましたが、pgAdminの初回起動時に設定していました。このマスターパスワードは、PostgreSQLインストール時のパスワードとは別の扱いなので注意して下さい。

 

 

パスワード変更方法

① パスワード変更はpgAdminで行います。

 

 

② pgAdminを起動します。左下にある「マスタパスワードを初期化」ボタンをクリックします。

 

 

③ このメッセージは「Yes」で次へ

 

 

④ 新しいパスワードを入力しOKボタンを押します。

 

 

⑤ PostgreSQLの再起動が必要になるので、下のコマンドで「サービスの停止」→「サービスの開始」を行います(わからない場合はコンピュータ自体を再起動)。

# PostgreSQL12の場合のreload例
pg_ctl -D "C:\Program Files\PostgreSQL\data" stop
pg_ctl -D "C:\Program Files\PostgreSQL\data" start

PostgreSQLへの接続(pgAdminを使って接続する)

PostgreSQLへ接続するにはpgAdminを使用すると手順も簡単でおすすめです。

ここではpgAdmin4を使ったPostgreSQLへの接続手順を説明します。

 

pgAdmin4の起動

①pgAdmin4はプログラム一覧のPostgreSQLの中にあります。クリックし起動して下さい。

※画面はPostgreSQL12ですが、13も同じ操作です。

 

②pgAdminの起動中画面が表示されるのでそのまま待ちます。

 

③パスワードの入力画面が表示されるので、インストール時に入力したパスワードを入力します。

 

※下の画面が表示されたらパスワードが間違っていますので、再度入力します。

 

④画面左上の「Servers」をダブルクリックします。

画面のように展開されれば、データベースへの接続ができました。

 

⑤pgAdminの起動はここまでになります。

 

⑥次はpgAdmin4の使い方(見方から操作まで)を説明します。

作業前に、pgAdminを日本にしたい場合はこちらを参照

 

エラーメッセージ

XAMPPのインストール後、Tomcatの起動時にエラーメッセージ

『Make sure you have Java JDK or JRE installed and the required ports are free』

が出た時の対応方法です。

 

※ネットで調べたところ、

『ポートがすでに使用している』という理由での対処方法はたくさんありましたが、

私の場合はこれではなく、JDKのインストールに関するエラーでした。

そのため備忘を兼て記載します。

 

環境

Windows 10 Home

XAMPP 7.4.8(2020年7月ダウンロード)

 

対応方法

対応の順番としては、

① JDKのインストール

② 環境変数の設定(3つ)

を行ったところうまくいきました。

 

①JDKのインストール

1.ここからインストーラーをダウンロードします。

 

2.JDK Downloadをクリック

 

3.画面を下にスクロールし、「Windows x64 Installer」の

「jdk-xx_windows_x64_bin.exe」をダウンロードします。

 

 

※2022年時点では画面はこのようになっていました。

URLはこちら

 

 

4.インストール

インストールはすべてそのまま「Next」でOKです。

 

 

 

②環境変数

次の3つの環境変数を追加します。

※ ユーザー環境変数、システム環境変数どちらに追加してもいいようでしたが、

私が登録した際のMEMOを記載します。

 

①「CATALINA_HOME」の追加

場所 :システム環境変数

変数名:CATALINA_HOME

変数値:C:\xampp\tomcat

 

② 「JAVA_HOME」の追加

場所 :システム環境変数

変数名:JAVA_HOME

変数値:C:\Program Files\Java\jdk-14.0.2

 

③ 「Path」の追加

場所 :ユーザー環境変数

変数名:Path

変数値:%CATALINA_HOME%\bin;

 

再起動後、再度XAMPPからSTARTしたらうまくいきました。

 

チートシート作りました

PostgreSQLの構文のチートシートを作りましたので使ってみてください。

※イメージ図

 

 

PostgreSQLの構文まとめを書いています

入門~経験者まで「基本構文・こんな時どう書くんだっけ?」のまとめ

 

説明

main_menu.xml等を変更して起動できなくなってしまった時の再インストール方法です。

手順は大きく「1.Workbenchの削除」→「2.Workbenchのインストール」の順に進めます。

 

 

1.Workbenchの削除

まずはじめにWorkbenchの削除から説明します。

①すべてのプログラムから「MySQL」→「MySQL Installer - Community」をクリック

 

②画面右の「Remove」をクリック

 

③「MySQL Workbench」の左のチェックを入れNextをクリック

 

④「Remove Selected Products」画面はそのまま「Execute」

 

⑤完了したら「Finish」をクリック

 

⑦最初の画面に戻ります。(Workbenchがリストから消えているはず)

 

 

2.Workbenchのインストール

次にWorkbenchのインストールについて説明します。

①右の「Add」ボタンをクリック

 

②Applications > MySQL Workbench > MySQL Workbench 8.0から一番上選択して⇒ボタン

 

③右側に「MySQL Workbench XX」が表示している状態で「Next」をクリック

 

④右下の「Execute」をクリック

 

⑤「Next」をクリック

 

⑥Installation Completeの画面で「Finish」を押せば終了です。

 

※追記

この手順でも、Workbenchが起動せずにエラーになる時がありました。

その場合は、再度「2.Workbenchのインストール」だけを実行してみたところうまくいったので試してみてください。

エラーについて

データベース削除時等に『database "XXXXX" is being accessed by other users

DETAIL:There is other session using the datanase』のエラーが発生した場合の対応方法です。

 

 

 

対応方法

そもそも原因は、そのDBに他からの接続があるため削除できないというメッセージです。

DBへの接続を強制切断するコマンドを実行すれば、DBを削除できるようになります。

(強制切断コマンドは切断していいかを確認の上、実行するようにしてください。)

-- DBの接続を強制切断する
select pg_terminate_backend(pid) from pg_stat_activity where datname = 'データベース名';

個別に、接続中のセッションを確認し接続するにはここを参照してください。

 

リストア(psql、pg_restor)の方法

このページではバックアップしたファイルをDBとして復元(リストア)する方法を解説します。

 

バックアップの方法

バックアップを行う方法についてはこちらで解説していますので参考にしていただけると幸いです。

 

 

 

リストア方法

リストアを行うためには、「psql」コマンドまたは、「pg_restore」コマンドを使用します。2つのコマンドはバックアップをした方法によりどちらを使うかが変わってきます。format=p(SQL文のテキストファイル)でバックアップした場合は「psql」、それ以外(format=c , format=t , format=d)は「pg_restore」を使用します。ここからはそれぞれのコマンド例を紹介します。

 

① format=p(SQL文のテキストファイル)のバックアップとリストア

1つ目は、format=pでバックアップをした場合のリストアコマンドです。ここだけpsqlを使用します。

# バックアップ
# pg_dump -U ユーザー名 --format=p --file=バックアップファイルパス 対象のDB
pg_dump -U postgres --format=p --file=C:\script\test1.sql testdb1

# リストア
createdb -U postgres newdb  # リストア先のDBを先に作成する
psql -h ホスト名 -U ユーザー名 -d リストア先のDB -f .sqlファイルのパス
psql -h localhost -U postgres -d newdb -f C:\script\test1.sql

オプションについて

-U … コマンドを実行するユーザー名を指定。

-d … データベース名を指定。

-h … ホスト名を指定。192.16.xx.yy等設定可能。localhostは省略可。

 

 

② format=c(カスタム形式)のバックアップとリストア

format=cでバックアップをした場合のリストアコマンドです。

# バックアップ
pg_dump -U postgres --format=c --file=C:\script\test2.custom testdb2

# リストア
createdb -U postgres newdb2  # リストア先のDBを先に作成する
pg_restore -h localhost -U postgres -d newdb2 C:\script\test2.custom

 

 

③ format=t(tar形式)のバックアップとリストア

format=tでバックアップをした場合のリストアコマンドです。

# バックアップ
pg_dump -U postgres --format=t --file=C:\script\test3.tar testdb3

# リストア
createdb -h localhost -U postgres newdb3  # リストア先のDBを先に作成する
pg_restore -h localhost -U postgres -d newdb3 C:\script\test3.tar

 

 

④ format=d(ディレクトリ形式)のバックアップとリストア

format=dでバックアップをした場合のリストアコマンドです。

# バックアップ
pg_dump -U postgres --format=d --file=C:\script\test4 testdb4

# リストア
createdb -h localhost -U postgres newdb4  # リストア先のDBを先に作成する
pg_restore -h localhost -U postgres -d newdb4 C:\script\test4

 

説明

pg_dump実行時に、パスワードを聞いてくるのをスキップ(省略する)方法を紹介します。

 

 

方法

方法は、pg_dumpの前に「set PGPASSWORD=パスワード」の1行を入れるだけです。

※例ではパスワードを「xxxxx」としていますが、お使いのパスワードに変更し実行して下さい。

-- pg_dumpの前にこの1行を入れて実行するだけです。
set PGPASSWORD=xxxxx

-- ここの2行はバックアップコマンド
cd C:\Program Files\PostgreSQL\bin
pg_dump -U ユーザー名 -f バックアップファイル名 -Fc データベース名

※ 「バックアップファイル名」はフルパス

 

 

 

使用例

-- pg_dumpの前にこの1行を入れます。
set PGPASSWORD=userpassword

-- ここの2行はバックアップコマンド
cd C:\Program Files\PostgreSQL\bin
pg_dump -U postgres -f C:\Test\testdb.backup -Fc shooldb

 

 

pg_dumpを詳しく解説

こちらの記事でpg_dumpについて詳しく解説しています。

一読してもらえればうれしいです。

 

説明

SELECT文で条件分岐をするにはCase文を使います。

ここではその構文と使用例を紹介します。

 

構文

CASE WHEN 条件1 THEN 値1
WHEN 条件2 THEN 値2
WHEN 条件3 THEN 値3
ELSE 値4 END AS 列名   --『AS 列名』は、あってもなくても可です。(ENDまでは必ず必要)
『WHEN 条件 THEN 値』をつなげていけばいくつでも条件を設定することができます。

 

あわせて読みたい

https://postgresweb.com/post-5291

 

 

 

使用例

次の例は「pg_table」のtablenameに対しcase文を使った例になります。

※そのまま実行できるので、コピーで実行し確認してみて下さい。

select 
    tablename,
    case when substring(tablename,5,1)= 'f' then 'a' -- (1)
    when substring(tablename,5,1)= 'p' then 'b'      -- (2)
    else 'c' end as flg                              -- (3)
from pg_tables
where schemaname != 'pg_catalog' order by tablename;

 

上の文の意味は、(1)の行で『tableの5文字目が'f'だったら'a'を表示する』、

(2)の行で『tableの5文字目が'p'だったら'b'を表示する』、

(3)の行で『(1)、(2)に合致しなければ'c'を表示する』としています。

またasを使っているので『これらの条件で表示する列名をflgとする』と書いています。

 

検索文字位置を取得する

文字列の中から、検索文字が何文字目にあるか検索するにはstrposを使用します。

見つからなかった場合は0が、見つかった場合は1以上の数値が返ります。

 strpos( 検索対象の文字列 , 検索する文字列)

 

 

使用例

select strpos('windows','d');                 -- 4(=4文字目にある)
select strpos('abcdefg','ef');                -- 5(=5文字目にある)
select strpos(upper('abcdefg'),upper('Cde')); -- 3(大文字小文字の区別なし)
select strpos('abcdefg','xyz');               -- 0(見つからない場合は0が返る)

 

 

ちょっとだけ緩く比較する

strposでは大文字小文字が区別されるので、区別しない+前後スペース除外した例を示します。

--検索対象と検索する文字列をそれぞれ、upperとtrimをかけて検索する
select strpos(trim(upper('ABCDEFGHIJKLMN')),trim(upper(' efg ')));  --5

 

 

関連記事(文字列操作)

文字列の結合、nullの結合

改行コードで結合、置換する

文字数のカウント(length)、バイト数を取得する

文字の切り取り(Left、Right、Substring)

lower(大文字を小文字に変換する)

全角半角スペースを除去する(trim)

upper(小文字を大文字に変換する)

大文字小文字を変換する、区別せず比較する

文字を置換する、複数置換する(replace、translate)

前0埋め、後ろ0埋め(lpad、rpad)

Nullの時に別の値に置き換える

nullif関数