PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで 電子書籍(近藤 雄太 正野 裕大 坂井 潔 鳥越 淳 笠原 辰仁 石井 達夫)|翔泳社の本
  1. ホーム >
  2. 電子書籍 >
  3. PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで

PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで






監修

形式:
電子書籍
発売日:
ISBN:
9784798164090
価格:
3,608(本体3,280円+税10%)
カテゴリ:
データベース
キーワード:
#データ・データベース,#ネットワーク・サーバ・セキュリティ,#システム運用,#開発環境
シリーズ:
徹底入門
電子書籍

インストールから機能・仕組み、アプリ作り、管理・運用まで
PosgreSQLの基本を一通り学べる定番入門書

PostgreSQLはオープンソースのリレーショナルデータベース管理システム(RDBMS)です。Linux、macOSといったUNIX系OSはもちろんのこと、Windowsにも対応しています。本書は、初めてPostgreSQLに触れる、あるいはそもそもデータベースに触れるのが初めてという方や、ちょっと使ったことはあるけどもう少し詳しく知りたいという方に向けた入門書です。第4版では、PostgreSQL 11をベースに全面的な改訂を行い、新旧問わずPostgreSQLの基本として初学者が押さえておくべきポイントを選別しています。

日ごろからPostgreSQLと深く関わっている執筆陣が、豊富な経験と知識をもとに、そのインストール方法、SQLの使い方から、アプリケーションの作成、そして運用にいたるまでを、さまざまな分野/視点から解説しています。また、PostgreSQLの最新の機能であるロジカルレプリケーションやパラレルクエリに関しても解説しています。

※本電子書籍は同名出版物を底本として作成しました。記載内容は印刷出版当時のものです。
※印刷出版再現のため電子書籍としては不要な情報を含んでいる場合があります。
※印刷出版とは異なる表記・表現の場合があります。予めご了承ください。
※プレビューにてお手持ちの電子端末での表示状態をご確認の上、商品をお買い求めください。

(翔泳社)

インストールから機能・仕組み、アプリ作り、管理・運用まで
目次の登録はありません。

付属データはこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

  • ■24ページ 「2.2.5 パスの設定」赤枠内の追加情報


    (画像クリックで拡大)

    Windows OSのアップデートでGUIが変化しています。
    上記の手順で「システムの詳細設定」を開けない場合は、以下の手順にしたがってください。

    1.Windowsキー+[R]キーの同時押しで「ファイル名を指定して実行」を呼び出す。
    2.「ファイル名を指定して実行」が表示されたら、入力欄に「SystemPropertiesAdvanced.exe」と入力して[OK]をクリックする。

  • ■26ページ「2.3.1 Yumリポジトリの設定」赤枠内の追加情報


    (画像クリックで拡大)

    執筆時点からファイルサーバーが再編成され、URLが無効になっています。
    新しいURLは以下のとおりです。

    https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

  • ■28ページ「2.3.2 PostgreSQLのインストール」赤枠内の追加情報


    (画像クリックで拡大)

    執筆時点では上記の対応が必要でしたが、PostgreSQL 11.8(2020年5月15日)以降は
    llvmパッケージを個別にインストールするのではなく、以下のコマンドで外部リポジトリを登録するだけでよくなっています。

    # yum -y install epel-release centos-release-scl

  • ■29ページ「2.3.2 PostgreSQLのインストール」赤枠内の追加情報


    (画像クリックで拡大)

    本書では、Linux OSのSELinuxとファイアウォールは無効化していることを想定しています。
    あらかじめ以下の操作でSELinuxとファイアウォールを無効化しておいてください。

    ●SELinuxの無効化
    rootユーザーで/etc/selinux/configを以下のとおり編集します。

    # SELINUX= can take one of these three values:
    # enforcing - SELinux security policy is enforced.
    # permissive - SELinux prints warnings instead of enforcing.
    # disabled - No SELinux policy is loaded.
    SELINUX=permissive (筆者注意: permissive は太字)

    その後、OSを再起動します。

    # reboot

    ●ファイアウォールの無効化
    起動しているファイアウォールを停止します。

    # systemctl stop firewalld

    ファイアウォールの自動起動を無効化します。

    # systemctl disable firewalld

この商品の「よくある質問」はありません。

現在表示されている正誤表の対象書籍

書籍の種類:電子書籍

書籍の刷数:全刷


※重版をした際に、内容が修正されている場合があります。「刷数の確認方法(例)」の図を参考に、お手元の書籍の刷数をご確認ください。下の「書籍の刷数」の欄で刷数を選択すると、お持ちの書籍の刷数に合わせて、正誤情報を絞り込むことができます。

書籍によっては表記が異なる場合がございます


本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

 書籍の刷数で正誤情報を絞り込みたい場合は選択してください。

 書籍の種類:

最終更新日:2023年02月14日
ページ数 内容 書籍修正刷 電子書籍訂正 発生刷 登録日
005
2~4行目
マイナーバージョンは、主にバグ修正版です。一方、メジャーバージョンの番号は、新機能の追加などで大幅に変更された場合に上がります。
マイナーバージョンの番号は、主にバグ修正が行われると上がります。一方、メジャーバージョンの番号は、新機能の追加など、大きな仕様変更が行われると上がります。
2刷 1刷 2021.05.26
010
「■ メモリの容量」1~2行目
また、並べ替えなどを行うために、さらにメモリ領域が必要となります。
また、データの並べ替えなどを行うために、さらにメモリ領域が必要となります。
2刷 1刷 2021.05.26
011
「2.2.2 one click installerのダウンロード」3行目
https://www.enterprisedb.com/products/pgdownload.do#windows
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
2刷 1刷 2021.05.26
030
「2.3.3 環境設定」3~19行目
vi などのエディタで~postgres/.bash_profileを編集します。 $ vi ~postgres/.bash_profile 次のように.bash_profileを編集します。 [ -f /etc/profile ] && source /etc/profile PATH=/usr/pgsql-11/bin:$PATH ―――追加 MANPATH=/usr/pgsql-11/share/man:$MANPATH  ―――追加 PGDATA=/var/lib/pgsql/11/data export PATH MANPATH PGDATA  ―――追加 ● PATH PostgreSQL のコマンドを絶対パスで指定せずに実行できるよう、環境変数PATHを設 定します。 ● MANPATH PostgreSQLのコマンドのオンラインマニュアルを参照できるよう、環境変数MANPATH を設定します。 ● PGDATA データベースクラスタのパスになります。 .bash_profileを編集し終えたら、設定ファイルを再読み込みしてください。 .bash_profileを編集し終えたら、設定ファイルを再読み込みしてください。
vi などのエディタで~postgres/.pgsql_profileを作成します。基本的にユーザーの環境変数は.bash_profile で編集しますが、PostgreSQL の本家サイトが公開するYumリポジトリを通してPostgreSQLをインストールする場合に限り、.pgsql_profileを使う必要があります。これは、本家サイトのPostgreSQL はインストールの都度、postgres ユーザーの.bash_profile は自動的に上書きするようになっているからです。 $ vi ~postgres/.pgsql_profile 次のように.pgsql_profileを編集します。 PATH=/usr/pgsql-9.0/bin:$PATH MANPATH=/usr/pgsql-9.0/share/man:$MANPATH PGDATA=/var/lib/pgsql/9.0/data export PATH MANPATH PGDATA ● PATH PostgreSQL のコマンドを絶対パスで指定せずに実行できるよう、環境変数PATHを設定します。 ● MANPATH PostgreSQLのコマンドのオンラインマニュアルを参照できるよう、環境変数MANPATHを設定します。 ● PGDATA データベースクラスタのパスになります。詳細については、「2.4.1 データベースクラスタの作成」で説明します。 .pgsql_profile を編集し終えたら、.bash_profile を再読み込みしてください。.bash_profile から.pgsql_profileも読み込まれるようになっています。

2刷で上記の修正をおこないましたが、内容の一部に誤りがございました。
大変申し訳ありません。
正しくは以下のとおりです。
(2021年7月20日)

■「2.3.3 環境設定」10~13行目
正:
PATH=/usr/pgsql-11/bin:$PATH

MANPATH=/usr/pgsql-11/share/man:$MANPATH

PGDATA=/var/lib/pgsql/11/data
export PATH MANPATH PGDATA
2刷 1刷 2021.05.26
030
「2.3.3 環境設定」10~13行目
PATH=/usr/pgsql-9.0/bin:$PATH MANPATH=/usr/pgsql-9.0/share/man:$MANPATH PGDATA=/var/lib/pgsql/9.0/data export PATH MANPATH PGDATA
PATH=/usr/pgsql-11/bin:$PATH MANPATH=/usr/pgsql-11/share/man:$MANPATH PGDATA=/var/lib/pgsql/11/data export PATH MANPATH PGDATA
3刷 2刷 2021.07.20
037
Column「データベースクラスタのバージョンアップ」のコード説明フキダシ(2箇所)
移行元
移行先
2刷 1刷 2020.02.13
048
表3.1の1行目

(画像クリックで拡大)

(画像クリックで拡大)

2行目以降と体裁を揃えます。
2刷 1刷 2021.05.26
074
3つ目のコマンド
$ psql -U testuser testdb
$ psql testdb testuser
2刷 1刷 2020.02.13
086
表4.4の「説明」の1行目
総数
検索対象行の総数
2刷 1刷 2021.05.26
091
「4.5.4 JOIN」6行目
meibo テーブルのID列と
meiboテーブルのid列と

「ID列」を「id列」(小文字)に変更します。
2刷 1刷 2021.05.26
161
5行目
そしてこのデータベースで上記のDDLを実行し、3つのテーブルを
そしてこのデータベースで上記のDDLを実行し、4つのテーブルを
3刷 1刷 2023.02.14
164
「リスト6.2 Csrf.php」のコード 上から2行目

(画像クリックで拡大)

(画像クリックで拡大)

この改行により、31行目以降の行数をを繰り下げます。
3刷 1刷 2023.02.14
164
「リスト6.2 Csrf.php」のコード 上から2~3行目

(画像クリックで拡大)

(画像クリックで拡大)

「31:   }」を改行します。
2刷 1刷 2020.07.13
169
リスト6.6 29~37行目

(画像クリックで拡大)

(画像クリックで拡大)
2刷 1刷 2021.05.26
170
リスト6.6 38~45行目

(画像クリックで拡大)

(画像クリックで拡大)
2刷 1刷 2021.05.26
170
本文12~18行目
また、PHP にはバイナリセーフではない関数【3】もあるので、$allow_binaryをtrue にしな い限りはNULL バイトを許さないようにしています。 mb_check_encoding 関数はdefault_charset に設定した値、さらに内部文字エンコーディ ングの値をもとにチェックを行います(34 行目)。今回は設定していないのでデフォルトの UTF-8 がdefault_charsetとして用いられています。このため、mb_check_encoding 関数は指 定された文字列がUTF-8として有効かどうかをチェックします。$allow_binary がtrue でな い限りUTF-8 以外の文字列も不正としました。
$allow_binary が偽のときは、文字列が正当どうかのチェックを行います【※】。今回は不要 な文字列が1つでも見つかった場合には$bad_input_exists にtrue が設定されます。これが 参照渡しになっているので、filter_input 関数が終わった後の上位のスコープでも判定がで きるという仕組みです。 PHP にはバイナリセーフではない関数【3】もあるので、NULL バイトを許さないようにして います。mb_check_encoding 関数はdefault_charset に設定した値、または内部文字エンコー ディングの値をもとにチェックを行います(35 行目)。今回は設定していないのでデフォルト のUTF-8 がdefault_charsetとして用いられ、UTF-8として正しいかがチェックされます。

側注に以下を追加します。

【※】
filter_input 関数の第4引数、キーoptions の値は無名関数です。この無名関数は、渡されたデータがスカラーの場合には1度だけ、配列の場合には要素数の回数分呼び出されます。変数を上位のスコープから引き継ぐことができ、その場合はuseで渡します。
2刷 1刷 2021.05.26
181
「6.2.3 ログイン処理」の「リスト6.13 signup.html(変更後)」とその上の文章。

(画像クリックで拡大)

(画像クリックで拡大)
3刷 1刷 2023.02.14
185
ページ中央 本文5行目
次に、先ほど作成したスクリプトファイルの Login.php を修正します(リスト 6.17)。
次に、スクリプトファイル login.php を作成します(リスト 6.17)。
3刷 1刷 2021.12.15
185
「リスト 6.17」の表題
リスト 6.17 Login.php(修正後)
リスト 6.17 login.php
3刷 1刷 2021.12.15
187
本文1行目
login.phpは以下の場所に保存します。 C:¥mytest¥simplesns¥public_html¥login.php

上記文章を「リスト 6.17」の直後に挿入します。
3刷 1刷 2021.12.15
194
リスト6.19
23: <a href="post.php?post_id=<?= h($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a>
23: <a href="post.php?post_id=<?= rawurlencode($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a>
3刷 1刷 2023.02.14
200
リスト6.22
9: <a href="post.php?post_id=<?= h($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a> 10: <div class="created-at"><?= h((new DateTime($post['created_at']))->format('Y-m-d H:i')) ?></div> 11: <?php endforeach; ?> 12: </table>
9: <a href="post.php?post_id=<?= rawurlencode($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a> 10: <div class="created-at"><?= h((new DateTime($post['created_at']))->format('Y-m-d H:i')) ?></div> 11: <?php endforeach; ?> 12: </dl>
3刷 1刷 2023.02.14
209
リスト6.28
37: <dt><a href="user.php?user_name=<?= h($post['user_name']) ?>"><?= h($post['user_name']) ?> 38: <dd> 39: <a href="post.php?post_id=<?= h($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a>
37: <dt><a href="user.php?user_name=<?= rawurlencode($post['user_name']) ?>"><?=h($post['user_name']) ?></a> 38: <dd> 39: <a href="post.php?post_id=<?= rawurlencode($post['post_id']) ?>"><?= nl2br(h($post['post']), false) ?></a>
3刷 1刷 2023.02.14
217
リスト6.31
5: <dt><a href="/user.php?user_name=<?= h($post['user_name']) ?>"><?= h($post['user_name']) ?></a></dt> 6: <dd><?= nl2br(h($post['post']), false) ?></dd> 7: <dd><?= h((new DateTime($post['created_at']))->format('Y-m-d H:i')) ?></dd> 18: <dt><a href="/user.php?user_name=<?= h($login->user('user_name')) ?>"><?= h($login->user('user_name')) ?></a></dt>
5: <dt><a href="/user.php?user_name=<?= rawurlencode($post['user_name']) ?>"><?= h($post['user_name']) ?></a> 6: <dd><?= nl2br(h($post['post']), false) ?></dd> 7: <dd class="created-at"><?= h((new DateTime($post['created_at']))->format('Ym-d H:i')) ?> 18: <dt><a href="/user.php?user_name=<?= rawurlencode($login->user('user_name'))?>"><?= h($login->user('user_name')) ?></a>
3刷 1刷 2023.02.14
218
リスト6.31
40: <a href="user.php?user_name=<?= h($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a> 41: <?php endif; ?> 42: <dd><a href="comment.php?comment_id=<?= h($comment['comment_id']) ?>"><?= nl2br(h($comment['comment']), false) ?></a> 43: <dd><?= h((new DateTime($comment['created_at']))->format('Y-m-d H:i')) ?></dd>
40: <a href="user.php?user_name=<?= rawurlencode($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a> 41: <?php endif; ?> 42: <dd><a href="comment.php?comment_id=<?= rawurlencode($comment['comment_id'])?>"><?= nl2br(h($comment['comment']), false) ?></a> 43: <dd class="created-at"><?= h((new DateTime($comment['created_at']))->format(' Y-m-d H:i')) ?>
3刷 1刷 2023.02.14
227
リスト6.35
6: <a href="user.php?user_name=<?= h($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a> 8: <a href="post.php?post_id=<?= h($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a> 14: <a href="/user.php?user_name=<?= h($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a></dt> 20: <dt><a href="/user.php?user_name=<?= h($login->user('user_name')) ?>"><?= h($login->user('user_name')) ?></a></dt>
6: <a href="user.php?user_name=<?= rawurlencode($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a> 8: <a href="post.php?post_id=<?= rawurlencode($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a> 14: <a href="/user.php?user_name=<?= rawurlencode($comment['user_name']) ?>"><?= h($comment['user_name']) ?></a> 20: <dt><a href="/user.php?user_name=<?= rawurlencode($login->user('user_name'))?>"><?= h($login->user('user_name')) ?></a>
3刷 1刷 2023.02.14
228
リスト6.35

(画像クリックで拡大)

(画像クリックで拡大)
3刷 1刷 2023.02.14
237
リスト6.38
6: <a href="user.php?user_name=<?= h($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a> 7: <dd> 8: <a href="post.php?post_id=<?= h($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a>
6: <a href="user.php?user_name=<?= rawurlencode($comment['post_user_name']) ?>"><?= h($comment['post_user_name']) ?></a> 7: <dd> 8: <a href="post.php?post_id=<?= rawurlencode($comment['post_id']) ?>"><?= nl2br(h($comment['post']), false) ?></a>
3刷 1刷 2023.02.14
238
リスト6.38
17: <a href="user.php?user_name=<?= h($parent_comment['user_name']) ?>"><?= h($parent_comment['user_name']) ?></a>
17: <a href="user.php?user_name=<?= rawurlencode($parent_comment['user_name'])?>"><?= h($parent_comment['user_name']) ?></a>
3刷 1刷 2023.02.14
280
1番上コード例
template1=# SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'user1'; rolname | rolpassword ---------+------------------------------------- user1 | md57d1b5a4329b6478e976508ab9a49ee3d  改めてパスワードを設定します。
template1=# SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'user1'; rolname | rolpassword ---------+------------------------------------- user1 | md57d1b5a4329b6478e976508ab9a49ee3d template1=> SET password_encryption TO 'scram-sha-256';  改めてパスワードを設定します。
2刷 1刷 2020.02.13