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

k1LoW/tbls 。 PostgreSQL の public スキーマではないテーブルで `detectVirtualRelations` を使いたい時は、 `dsn` 設定でそのスキーマを指定すると期待通りに動作する

k1LoW/tbls についてまとめ

  • PostgreSQL における detectVirtualRelations の話。
  • 任意のデータベースの public スキーマでは期待通りに機能する。
  • 任意のデータベースの public 以外のスキーマでは
    • 期待通りに機能しない。設定していない状態時と同様の結果となる。
    • dns 設定にて、 options=--search_path%3Dshcema_name などと指定すると期待通りに機能する。
カテゴリー
コンピューター

Postgresql に接続する時にデータベースのスキーマを指定するには options で指定するのだけれども、その値としてイコールを使うときは「%3D」を使え

まとめ

つまりこうだ

psql 'postgres://postgres:password@localhost:5432/db2?sslmode=disable&options=--search_path%3Duser2

これで db2 データベースに user2 スキーマで接続する。

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

k1LoW/tbls 。PostgreSQL ではデータベースの public スキーマでのみ `detectVirtualRelations` が発動する。ユーザ用に作成されたスキーマ (例えば `CREATE SCHEMA AUTHORIZATION joe;`) のテーブルでは `detectVirtualRelations` は発動しなかった

参考

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

k1LoW/tbls を初めて使い始めたいのでサンドボックスとして Docker で PostgreSQL 環境を改めて作った

まとめ

  • バージョンを切り替えたい気持ちは今のところないので .env は用意しなかった。
  • イメージに tbls を追加するので Dockerfile を用意した。
  • volumes に DB データを永続化するようにした。
カテゴリー
コンピューター

マルチテナントアーキテクチャのアプリをより安全にするために 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