カテゴリー
コンピューター

マルチテナントアーキテクチャのアプリをより安全にするために PostgreSQL の行レベルセキュリティ (行セキュリティポリシー、 Row Level Security) をすぐに体験できるようにした記録

5.8. 行セキュリティポリシー を利用することで単一データベースかつ単一スキーマ方式を採用したマルチテナントアーキテクチャをより安全にすることができそうです。

実際にシステムやアプリに組み込む前に、 PostgreSQL の Row Level Security とはそもそもどのような物なのか、手を動かすことで体験いたしました。

本投稿では、その時の動きをまとめます。また、時間が経ってもう一度 PostgreSQL の Row Level Security をおさらいしたくなったり、新たに挙動を確かめたくなったりした時のために、すぐにお試しの環境を作れるように記録を残します。

カテゴリー
Linux

PostgreSQL の無難なロケールは “なし” (C) だと思うが、 Docker コンテナを使いたいときにロケールをなし (C) に設定する簡単な方法

まとめ

  • 起動時の環境変数 POSTGRES_INITDB_ARGS で設定することで、ロケールをなし (C) に設定可能
    • - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --locale=C
    • POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C" <= 注意。コッチっは試していない。
  • ちなみに、 docker run の場合は docker run --rm -it -e POSTGRES_PASSWORD=secret -e POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C" postgres:12.2 bash といった書式になる。
カテゴリー
Linux

php:7.3-apache Docker コンテナへ pdo_pgsql をインストールするときの注意点

注意点

  • libpq-dev を事前にインストールし、それから docker-php-ext-install pdo_pgsql を行うこと。
カテゴリー
コンピューター

【PostgreSQL】PL/pgSQL を使わずに 1 回の SQL でループを実現する方法

まとめ

  • WITH RECURSIVE を使う。
  • ループでない時と比べて性能が向上または劣化するかは検証していない。
  • ループの中身を UNION ALL で繋げたものと比べると、順番が異なっていたときがあった気がする(うろ覚え)。下例のループ内部分に ORDER BY をつけて制御する。

以下は、公式ページの例に解説を加えた、シンプルな例です。

カテゴリー
コンピューター

【PostgreSQL】interval に指定する値を動的にしたい場合の書き方

まとめ

  • CAST(1 || ' month' AS interval) というようにする。”1″ の部分を引数など、動的にできる。

実践

カテゴリー
Microsoft

Windows7 の PostgreSQL9.4 のデータベース定義や ER 図を SchemaSpy を導入して自動生成する手順

環境

  • Windows7 Professional 32bit
  • PostgreSQL 9.4
  • JDK 8
カテゴリー
コンピューター

【Ansible】【Redmine】バージョンの高い PostgreSQL をインストールして発生した bundle エラーを解消する

ポイント

  • PostgreSQL yum postgresql といった形ではなく、をリポジトリを導入して yum postgresql96-server などとした場合に発生した。
  • 事前に bundle config することが重要だった。
  • 具体的には、bundle config build.pg --with-pg-config=/usr/pgsql-9.6/bin/pg_config を行い、次に今まで失敗していたインストールコマンド bundle install --without 'development test' --path vendor/bundle を行うことで、無事にインストールできた。
カテゴリー
コンピューター

【Ansible】PostgreSQL スーパーユーザにパスワード設定後のユーザや DB 追加操作する時のコツ

  • login_user、login_password を設定する。
  • インストール直後など、スーパーユーザにパスワードが設定されていない場合、PostgreSQL 関連モジュールでは自由に設定が可能
  • しかし、一度パスワードを設定すると、今後はそのパスワードがないと PostgreSQL への変更が行えない。
  • そこで、まだパスワードが設定されていなくても、login_user、login_password を明示的に指定することでこの問題を回避し、冪等性を保つことができる。

カテゴリー
Linux

【Ansible】【Vagrant】CentOS 7 での PostgreSQL 9.6、phpPgAdmin 環境構築メモ

を作るにあたって、情報源や、勉強になったことなどをノートしていきます♪

カテゴリー
コンピューター

【PostgreSQL】date 型を足し引きするポイント

PostgreSQL で date 型の四則演算ポイント

  • ORACLE と異なり、ADD_MONTH や LASTDAY 関数がない。
  • interval 型があるのでこれを利用する。
  • 一旦文字列型にして必要な部分を切り出して、、、という操作はしないようにする。出来上がった SQL を見た時、意図が伝わらないため。

日付を足し引きする PostgreSQL 例