ポータブル版について

PostgreSQLをインストールせずに使用したい時には、ポータブル版をお勧めします

 

ポータブル版とは、インストールせずにダウンロードして実行できるソフトのことです。

必要がなくなった時に、フォルダを消すだけですむので簡単に削除ができます。

PostgreSQLに限らず、会社PCやテスト的に使ってみたい時にPortable版での検証はおすすめです。

 

ここではPostgreSQLのポータブル版のダウンロードと、付属のPostgreSQL操作用ツール「pgAdmin」を起動するところまで説明します。

 

ダウンロード

① ポータブル版のダウンロードサイトを開きます。

 

 

② 緑のボタン「DOWNLOAD」(赤枠の箇所)をクリックします。

 

 

③ 緑の文字で「Your download will start shortly」と表示され、数秒待つとダウンロードが始まります。

 

 

④ zipファイルがダウンロードされたら解凍します。

2020年12月時点では「pgsql 12.4-1 Windows.zip」というファイル名でした。

 

 

⑤ 解凍すると「pgsql」というフォルダができます。

※ 日本語を含むフォルダ名だと不安定な動きをする可能性があります。

そのため一時的に「C:\test」などのフォルダを作り、作業をしたほうがよいかと思います。

 

 

pgAdminで動作を確認する

① まず「psql」フォルダには、「PostgreSQL-Start.bat」というバッチファイルがあるのでそれをダブルクリックして実行します。

 

 

② コマンドプロンプトの画面が起動し、「サーバー起動完了」のメッセージが表示されればOKです。

コマンドプロンプトの画面は最小化しておきましょう。

 

 

③ 次に「PgAdmin4.bat」をダブルクリックし、pgAdminを起動します。

 

 

④ パスワード入力画面が表示されたら「postgres」と入力しOKを押します。

 

 

⑤ pgAdminにログインできたら完了です。

 

以上でポータブル版のインストール方法でした。

pgAdminの使いかたは次の記事で紹介していますのでそちらも是非。

 

あわせて読みたい

https://postgresweb.com/post-6741

 

 

他のバージョンをインストール

PostgreSQL13のインストール

PostgreSQL12のインストール

PostgreSQL11のインストール

 

PostgreSQLの読み方

「postgreSQL」の読み方は、「ポストグレスキューエル」です。

略して「ポスグレ」と呼ぶことも多く、このサイトの名前もここから付けています。

書き方は「PostgreSQL」と「P」と「SQL」が大文字のようです。

pg_hba.confの中身

pg_hba.confの設定値のうちでMETHODについて、

恥ずかしながらよくわからなかったので、調べてまとめました。

# pg_hba.confの設定値(METHOD)について
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             127.0.0.1/32            md5 

 

METHODに設定できる値

METHODとは、「端末が接続してくる際の認証方式」です。

 

METHODは次の値から指定できます。

trust , reject ,  md5 , crypt , password , krb5 , ident , pam 

それぞれについては以下の意味があります。

※ 困ったりよくわからない場合は、「md5」を選んでおきましょう。

 

trust … 全てのホストから、全てのデータベースへの接続を許可する(パスワードなし)。

# 全てのホストから、全てのデータベースへの接続を許可する
host all all 0.0.0.0/0 trust

 

reject … 接続を拒否する。特定のIP等からの接続を拒否する場合に使用する。

# rejectの例
host   all   192.168.0.0   255.255.0.0   trust   # 接続を許可するネットワーク
host   all   0.0.0.0       0.0.0.0       reject   # 上以外は接続を拒否する

 

md5 … 接続に暗号化したパスワードを使う。パスワードはMD5暗号化を使用する。

crypt … 接続にパスワードを要求する。パスワードはcrypt-暗号化を使用する

password … 接続にパスワードを要求する。パスワードは暗号化されず平文で送信する。

krb5 … Kerberos認証を使う場合に指定します。

ident …  Ident認証を使う場合に指定します。

pam … PAM認証を使う場合に指定します。

 

追記(2021/1/11)

PostgreSQL13から、デフォルト値が「scram-sha-256」というものになっていました。

これは、以前からある md5 認証よりも安全なものですが、

ただし古いバージョンのPostgreSQLでは使用できない点が注意とのことです。ご参考まで。

 

character型

characterとは

character型は、「character(整数)」と書き、その桁数分必ず文字で埋まる列です。

文字列が定義した長さに満たない場合、半角スペースで埋まります。

「character」と整数を省略した場合、「character(1)」と同じ意味になります。

「character varying(整数)」とは、列の意味が異なるので注意して下さい。

--文字比較は後ろのスペースあり・なしどちらでも可(TRUE)となります。
--※ 前のスペースは区別されるため注意して下さい。
--例:Helloをchar(10)として、"="の右の文字列と比較
select cast('Hello' as character(10)) = 'Hello';     -- 'true'(一致)
select cast('Hello' as character(10)) = 'Hello   ';  -- 'true'(一致)
select cast('Hello' as character(10)) = '   Hello';  -- 'false'(不一致)

 

使用例

--1.定義の例(CREATE TABLEでの使用)
CREATE TABLE テーブル名
(・・・
列名 character(桁数), -- 列を定義
・・・)

--2.列を追加する
alter table テーブル名 add column 列名 character(10);

--3.characterに変換する
select cast('Hello' as character(10));           -- 'Hello     '
--※ 長さがオーバーしている場合はそこで自動的に切られます
select cast('abcdefghijklmn' as character(10));  -- 'abcdefghij'

--4.関数で変数を宣言する
variable1   character(10);

 

 

character varying(整数)、character varying

まず「character varying(整数)」と「varchar(整数)」は、全く同じものです。

ただし、varyingとついていない「character(整数)」とは異なるもののため注意して下さい。

 

「character(整数)」はスペース埋めがされるため、必ずその桁数になりますが、

「character varying(整数)」は、スペース埋めがされないため登録した文字の長さになります。

整数を省略した「character varying」は、1GBまで入る文字型となります。

 

また、下の例にあるように後ろのスペースがあり・なしによって文字の一致判定が異なります。

「character(整数)」は後ろスペースがあっても「一致」と判定しますが、

「character varying(整数)」は後ろスペースがあったら「一致しない」と判定されます。

--文字比較は後ろのスペースがあった場合、
--「異なる」と判定される点がcharacter(整数)と異なります。
--例:Helloをcharacter varying(10)として、=の右の文字列と比較
select cast('Hello' as character varying(10)) = 'Hello';    -- 'true'(一致)
select cast('Hello' as character varying(10)) = 'Hello   '; -- 'false'(不一致)
select cast('Hello' as character varying(10)) = '   Hello'; -- 'false'(不一致)

 

使用例

--1.定義の例(CREATE TABLEでの使用)
CREATE TABLE テーブル名
(・・・
列名 character(桁数),   -- 列を定義
列名 character varying, -- 列を定義
・・・)

--2.列を追加する
alter table テーブル名 add column 列名 character varying(10);
alter table テーブル名 add column 列名 character varying;

--3.character varyingに変換する
select cast('Hello' as character varying(10));   -- 'Hello'
select cast('Hello' as character varying);       -- 'Hello'
--※ 長さがオーバーしている場合はそこで自動的に切られます
select cast('abcdefghijklmn' as character varying(10));  -- 'abcdefghij'

--4.関数で変数を宣言する
variable1   character varying(10);
variable1   character varying;

 

 

text型

text型は、「character varying」と同じものです。

※ textとvarchar(character varying)の違い

 

pg_hba.confとは

pg_hbaとは、ざっくりいうと「このIPから接続してもいいよ」という設定のファイル。

サーバーに接続しようとしてうまくいかない時は、このファイルを見直す必要があります。

 

ファイルpg_hba.confの場所

ファイルの場所は、

初期設定で『C:\Program Files\PostgreSQL\XX\data\pg_hba.conf』にあります。

PostgreSQL12の場合 … 「C:\Program Files\PostgreSQL\12\data\pg_hba.conf」

PostgreSQL11の場合 … 「C:\Program Files\PostgreSQL\11\data\pg_hba.conf」

 

データベースの文字コードを変更する

結論からいうと、作成後のデータベースの文字コードを変更することはできません。

 

新しい文字コードでデータベースを作成し、そこにリストアしようと思っても、

そもそもの文字コードを変え新しくデータベースを作る時にエラーになり、うまくいきません。

 

そのため次の手順で行うことで、そのエラーを回避し、

新しい文字コードで作成したデータベースにリストアすることができます。

うまくいかなかったときは、この手順を参考にしてみて下さい。

 

1.文字コードを変更したいデータベースのバックアップを取得する

⇒ ファイル名は自由でOKです。拡張子は、「.backup」で。

 

2.データベース「template1」の文字コードを、変更したい文字コードに変更する

⇒ PostgreSQLはデータベースを新しく作成する場合、データベース「template1」を

コピーする形で作成します。新しく作成するデータベースの文字コードを変更するには、

先にこれを変更する必要があります。変更の仕方はこちらを参照して下さい。

 

3.変更したい文字コードでデータベースを作成する

⇒ データベース名は自由でOKです。

 

4.作成したデータベースに1のバックアップでリストアする

 

以上がデータベースの文字コードを変更する手順です。参考にしてみて下さい。

template1の文字コードを変更する

template1の文字コードを変更するには、直接変更ができません。

そのため一度template1データベースを削除した後、再作成することで変更が可能です。

--template1データベースを再作成(次の1から4をすべて実行)
--1.template1データベースをテンプレートから外す
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';

--2.template1データベースを削除
DROP DATABASE template1;

--3.template1データベースを作成
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 文字コード 
LC_COLLATE = 'C' LC_CTYPE = 'C';

--4.template1データベースをテンプレートへ戻す
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

※『3.template1データベースを作成』の箇所は変更したい文字コードを指定します。

指定できるエンコードはこちらを確認してください。

 

※ 4行一度に実行すると「DROP DATABASE cannot run inside a transaction block」エラーが、

発生するかもしれません。その場合は、1~4を一つずつ実行するとうまくいくと思うので、

試してみて下さい。

データベース「template1」とは

データベースのtemplate1とはその名の通り、データベースのテンプレートのことです。

 

テンプレートということもあって、データベースを新しく作る時(CREATE DATABASE)する時には、

このtemplate1をコピーして新しいデータベースを作っています

 

つまり新しいデータベースに常に入れておきたい共通関数などをここに作っておけば、

CREATE後に改めて作らなくてもよいということになり、ここは便利なところです。

 

データベースの文字コードもtemplate1から引き継がれるので、

(あるか不明ですが)度々変更しているケースがあればここを変えてしまうのも手でしょうか。

 

 

データベース「template0」とは

データベースのtemplate1の他にtemplate0も存在しています。

 

上で記述しているようにtemplate1は適宜変更を加えることを想定していますが、

template0は、システム標準のオブジェクトのみが含まれるため更新や削除はできません。

 

template0からデータベースを作成するには次のSQLを使用します。

※ 指定をしない場合は、template1から作成される

--templete0からデータベース作成する構文
CREATE DATABASE 作成するデータベース名 TEMPLATE template0;

--例:template0からデータベース名「testdb」を作成する
CREATE DATABASE testdb TEMPLATE template0;

 

ERROR: source database "template1" is being accessed by other users」の対処方法

データベースを新しく作成しようとした際に、

次のようなエラーが出た時の対処方法について説明します。

 

 

対処方法1:pgAdminから切断する

pgAdminで操作中の場合、template1に対して接続中の可能性があります。

その場合、template1を選択した状態で、右クリックし、「データベースの接続を切断」します

 

 

対処方法2:SQLからセッションを確認し切断する

起動中のセッションを確認し、そのセッションを切断します。

SQLで行いますが、詳しい手順はこちらを参照してください。

 

Windowsで文字コード(client_encoding)を変更する

ここでは、Windows環境で文字コード(client_encoding)を確認、変更する方法を紹介します。

※ ここで紹介するSQLはpgAdminからも実行できます。

 

 

client_encodingを確認する

client_encodingを確認するには、次のSQLを使用します。

--client_encodingを確認する
show client_encoding;

 

 

client_encodingを変更する

client_encodingを変更するには、次のSQLを使用します。

--client_encodingを変更する
set client_encoding to 変更後のエンコード;

set client_encoding to SJIS;   -- SJISへ変更
set client_encoding to UTF8;   -- UTF8
set client_encoding to EUC_JP; -- EUC_JPへ変更 

指定できるその他のエンコードはこちらを確認してください。

 

 

client_encodingをデフォルトに戻す

client_encodingをデフォルトに戻すには、次のSQLを使用します。

--client_encodingをデフォルトに戻す
reset client_encoding;