投稿

ラベル(postgreSQL)が付いた投稿を表示しています

ローマ数字の置き換え変換ルール

公表されている医療情報をPostgreSQLに取り込んで活用しようとしているときの覚書。 具体的には施設基準のデータベースを作ろうとしている。 困ったのが 全角ローマ字数字の「Ⅰ」(U+2160) が 全角英字「I」(U+FF29) となっていたりするのでデータベースに保存する前に統一処理したい。 (見た目では分からない) 変換方針 全角ローマ字数字に統一する。 全角英字→全角ローマ字数字の変換用連想配列を作る(Ⅰ~Ⅳ)。 「DX」など数字ではなく名称部分に使われていることがあるので気を付ける。 PHPでループしてstr_replaceで置き換える。 ちなみに政府のシステムでは置き換え規則があるらしい。 参考:  内閣府共通意見等登録システム - 内閣府 こちらは半角英字に統一している。 DXの場合、D10と区別できなくなくなるので数字は数字として変換した方がいいと思う。 【関連記事】 データベースの命名規則 病院の施設基準を自動更新するには?

データベースの命名規則

公表されている医療情報をPostgreSQLに取り込んで活用しようとしているときの覚書。 今後のためにデータベースの命名規則を考えてみた。 環境: PostgreSQL 15.6 WordPressのデータベースを参考にする。 参考:  Database Description « WordPress Codex チーム内で共有して開発しやすくすることが目的。 データベース名 小文字の英単語。 例)medical 単語はアンダースコアで分ける(スネークケース) テーブル名 イミュータブルデータモデルで設計する。 リソースとイベントに分けてテーブル設計する。 参考:  イミュータブルデータモデル(入門編) | PPT 接頭辞を付ける。リソースは「r_」。イベントは「e_」。 → 直感的でないのでやめた。 設計の考え方としてリソースとイベントに分けるがテーブル名は関係ない。 小文字の英単語。 単語はアンダースコアで分ける(スネークケース)。 metaも分ける(WordPressはmetaを分けてない) 例) hospital_meta 基本は複数形。 例)hospitals カラムを追加したくなったときはmetaテーブルで十分か検討する。 カラム名 公開情報をインポートするので、可読性を優先し日本語も許容する。 PostgreSQLの識別子はデフォルトで64バイトまで。 UTF8の日本語だと16文字まで。 参考:  PostgreSQL: Documentation: 16: 4.1. Lexical Structure idはテーブル名を付けて分かりやすくする。 例) hospital_id 公開情報をインポートするカラムは日本語(10文字以内)。 CREATE TBLE文にソース情報を残す。 システム用のカラム名は小文字の英単語。 単語はアンダースコアで分ける(スネークケース)。 作成日: inserted_date, 更新日: modified_dateは基本必須。 Laravelはcareted_at, updated_atらしいが_dateの方が分かりやすい。 is_deletedよりdeleted_dateを使う。 共通 日本人が直感的に分かるレベルの英単語を使う。 命名規則を変更する際は経緯を残す。 【関連記事】 FreeBSD...

FreeBSD14にPostgreSQL+pgAdmin4をインストール

開発環境のローカル仮想マシンにPostgreSQLをインストールしたときの覚書。 環境: FreeBSD 14.1, Python 3.9.18, PostgreSQL 15.6 1. PostgreSQL Serverをインストール pkgからインストールする。 最初はpostgresql16-serverをインストールしたけど、py39-psycopgをインストールしたときにpostgresql15へ置き換えようとするので、postgresql15-serverをインストールし直した。 # pkg search postgresql # pkg search -f postgresql15-server # pkg install postgresql15-server 画面に表示された通りに実行。 # sysrc postgresql_enable=yes # service postgresql initdb # service postgresql start データの置き場所などを起動スクリプトで確認。 # less /usr/local/etc/rc.d/postgresql postgresユーザーになって確認する。 # su - postgres # pwd /var/db/postgres ユーザー一覧とデータベース一覧表示。 $ psql postgres=# \du postgres=# \l 2. PostgreSQLの文字セット(エンコーディング)を設定 日本語を扱う場合は、ja_JPをを設定してあげないと正しく並び替えできない。 前の記事を参考にする。 参考:  PostgresSQLの言語設定(locale)をja_JPにする OSで提供している言語地域(ロケール)を確認。 # locale -a 「ja_JP.UTF-8」があるのを確認。 PostgreSQLの設定変更。 # su - postgres $ less data15/postgresql.conf lc_messages = 'C.UTF-8'               ...

CentOS Stream 9にPostgreSQL 16をdnf経由でインストール

PostgreSQL Serverを開発サーバーにインストールしたときの覚書。 環境: CentOS Stream 9, PostgreSQL 16.0 1. PostgreSQL Serverをインストール 公式サイトを参考に。 参考:  PostgreSQL: Linux downloads (Red Hat family) リポジトリを検索。 # dnf search postgresql # dnf info postgresql-server v13.11だった。 モジュールリストにあるか確認。 # dnf module list postgresql CentOS Stream 9 - AppStream Name                       Stream                Profiles                          Summary postgresql                 15                    client, server [d]                PostgreSQL server and client module postgresql                 16                    client, server [d]...

pgAdmin4を6.19から8.1にアップグレード

pgAdmin4を最新にアップグレードしたときの覚書。 環境: CentOS Stream 8, Python 3.9.17 Pythonのvenvでインストール+サービス化したときの記事はこちら。 pgAdmin4をCentOS8にvenvでインストール pgAdmin4をサービス化して自動起動設定 一応サービスは止めておく。 # systemctl stop pgadmin4 pipをアップグレードする。 # python -m pip install --upgrade pip 仮想環境のPythonをアップグレードする。 # python -m venv /opt/software/python-venv/pgadmin4/ --upgrade pgAdmin4のvenvに入る。 # source /opt/software/python-venv/pgadmin4/bin/activate pipのパッケージでアップデート可能な一覧を表示。 (pgadmin4)# pip list -o 仮想環境のpipをアップグレード。 (pgadmin4)# pip install --upgrade pip pgAdmin4をアップデート。 (pgadmin4)# pip install -U pgadmin4 無事成功したっぽい。 パッケージ一覧確認。 (pgadmin4)# pip list  pgAdmin4のvenvから出る。 (pgadmin4) # deactivate pgAdmin4起動して確認。 # systemctl start pgadmin4 # systemctl status pgadmin4 ブラウザで確認。 思ったより簡単だった。 【関連記事】 pgAdmin4をサービス化して自動起動設定 pgAdmin4をCentOS8にvenvでインストール CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続

GeoIP2のCSVデータでPostgresSQLデータベースを更新して国別拒否リストを生成

国単位でIPアドレス制限を行うためにPostgreSQLにインポートしたGeoIP2のデータを更新しようとしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.6, nginx 1.22.1 GeoIP Updateは独自形式のデータベースバイナリ 公式が公開しているGeoIP Updateというプログラムが使えるか調査。 Updating GeoIP and GeoLite Databases | MaxMind Developer Portal GitHub - maxmind/geoipupdate: GeoIP update client code YUMリポジトリにもあったけどバージョンが低い。 # dnf search geoip # dnf info geoipupdate Name         : geoipupdate Version      : 2.5.0 だけどGeoIP Updateは独自形式(mmdb)で保存される。 これをnginxから参照する方法もあるみたいだけど、nginx自体のbuildが必要との情報があったので、前と同じcsv形式でPostgreSQLのデータベースをアップデートすることにした。 国別IPアドレスのCSVファイルをダウンロード 最新のCSVダウンロード手順 MaxMind へログイン 左メニューのGeoIP2/GeoLite2のDownload Files 「GeoLite2 Country: CSV Format」のDownload ZIPをクリック ZIPファイルの中身 GeoLite2-Country-Blocks-IPv6.csv: IPv6一覧 GeoLite2-Country-Blocks-IPv4.csv: IPv4一覧 GeoLite2-Country-Locations-ja.csv: IPアドレスIDと国コードの対応リスト(日本語版) PostgreSQLデータベースへインポート 新規作成時は前の記事を参考に。 nginxで国単位のIPアドレス制限 postgresユーザーでSQLコマンド発行 # su - postgres $ psql geo 確...

dnf updateしたらphp-pgsqlのエラー

dnf updateしたらエラーになったので調べた時の覚書。 環境: CentOS Stream 8, PHP 7.4.30 # dnf update Last metadata expiration check: 8:04:20 ago on Fri 21 Oct 2022 07:49:06 AM JST. Error:  Problem: package php-pgsql-7.4.30-1.module_el8.7.0+1190+d11b935a.x86_64 requires libpq.so.5(RHPG_9.6)(64bit), but none of the providers can be installed   - cannot install both libpq5-15.0-42PGDG.rhel8.x86_64 and libpq5-14.5-42PGDG.rhel8.x86_64   - package libpq5-15.0-42PGDG.rhel8.x86_64 obsoletes libpq provided by libpq-13.2-1.el8.x86_64   - package libpq5-15.0-42PGDG.rhel8.x86_64 obsoletes libpq provided by libpq-13.3-1.el8_4.x86_64   - package libpq5-15.0-42PGDG.rhel8.x86_64 obsoletes libpq provided by libpq-13.5-1.el8.x86_64   - cannot install the best update candidate for package php-pgsql-7.4.30-1.module_el8.7.0+1190+d11b935a.x86_64   - cannot install the best update candidate for package libpq5-14.5-42PGDG.rhel8.x86_64 (try to add '--allowerasing' to command line to replace conflictin...

CentOS8 + venvのpgAdmin4をアップグレード

pgAdmin4をv6.6からv6.11にアップグレード(バージョンアップ)したときの覚書。 環境: CentOS Stream 8, pgAdmin4 v6.6 インストールしたときの記事はこちら。 pgAdmin4をCentOS8にvenvでインストール Python仮想環境用のディレクトリへ移動してスクリプト実行 # cd /opt/software/python-venv # source pgadmin4/bin/activate アップグレード確認 (pgadmin4)# python -m pip list -o まずは基本モジュールのアップグレード実行 (pgadmin4)# python -m pip install -U pip setuptools requests  requestsとpgadmin4のバージョンが合わないとエラー。 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. pgadmin4 6.6 requires requests==2.25.*, but you have requests 2.28.1 which is incompatible. pgadmin4をアップグレード (pgadmin4)# python -m pip install -U pgadmin4 venv仮想環境から抜けて、pgadmin4のサービスを再起動 (pgadmin4)# deactivate # systemctl stop pgadmin4 # systemctl start pgadmin4 # systemctl status pgadmin4 ブラウザでアクセスして確認。 【関連記事】 pgAdmin4をサービス化して自動起動設定 pgAdmin4をCentOS8にvenvでインストール

nginxで国単位のIPアドレス制限

セキュリティのために日本国外からのアクセスをブロックしようとしたときの覚書。 環境: CentOS Stream 8, nginx 1.20.2, PostgreSQL 14.2 IPアドレスから国を判定するためにMaxMind社が提供しているデータを使う。 MaxMind社はIPアドレスの位置情報を提供しているアメリカの会社。 参考:  MaxMind - Wikipedia nginxにGeoIP2モジュールを追加するとパフォーマンスに影響が出そうな気がするので、まずは国ごとのIPアドレスリストを生成することから始めてみた。 MaxMindはAPIを幅広く提供していて使いやすい。 GeoIP2 and GeoLite2 Database Documentation | MaxMind Developer Portal GeoLite2はクリエイティブコモンズライセンスで提供されている。 配布する場合はクレジット表示が必要。 参考:  GeoLite2 Free Geolocation Data | MaxMind Developer Portal 国別IPアドレスリストをPostgreSQLにインポート 公式サイトを参考に。MySQLへのインポート方法もある。 PostgreSQLにはcidrというIPv4とIPv6を格納するデータ型があるので便利。 Importing GeoIP2 and GeoLite2 databases to PostgreSQL | MaxMind Developer Portal PostgreSQL: Documentation: 14: 8.9. Network Address Types 簡単な手順 メールアドレスでサインアップする。 マイページ左メニューの「Download Files」から「GeoLite2-Country-CSV」zipファイルをダウンロード。 ASNはAS番号を割り当てられた組織 参考:  自律システム (インターネット) - Wikipedia PostgreSQLにインポート CSVファイルを開発サーバーに置いて、DBeaverでデータベースを作成して、公式サイトのcreate table文を実行。 参考:  Importing GeoIP2 and GeoLi...

pgAdmin4をサービス化して自動起動設定

pgAdmin4をサービス化して自動起動したときの覚書。 本番環境はphpMyAdminと同じくブラウザでデータベースを確認できるようにする。 環境: CentOS Stream 8, nginx 1.20.2, pgAdmin4 6.6, certbot 1.24.0 インストールするまでは前の記事を参考に。 参考:  pgAdmin4をCentOS8にvenvでインストール unitファイル作成 参考サイト systemd のユニットファイルの作り方 | 晴耕雨読 Systemd入門(1) - Unitの概念を理解する - めもめも OS起動時にsystemdで行われていること - Qiita man systemd.unit の訳 - kandamotohiro Hostinghub.eu | Articles and information システムサービス用unitファイルの置き場所に移動して一覧表示 # cd /etc/systemd/system # ls 「systemctl enable」したシンボリックリンク一覧をみる # ll multi-user.target.wants/ サービスの依存関係を見る # systemctl list-dependencies PostgreSQLのunitファイルを参考にして編集する。 # cp multi-user.target.wants/postgresql-14.service ./pgadmin4.service # less pgadmin4.service # # pgAdmin4 # [Unit] Description=pgAdmin4 service with gunicorn After=syslog.target After=network.target [Service] User=nginx Group=www # Location of venv pgadmin4 Environment="PATH=/opt/software/python-venv/pgadmin4/bin/" ExecStart=/opt/software/python-venv/pgadmin4/bin/gunicorn  --bind unix:/tmp/pgadmi...

pgAdmin4をCentOS8にvenvでインストール

venvを知って仮想環境へインストールしたときの覚書。 環境: CentOS Stream 8, Python 3.9.7, PostgreSQL 14.2, pgAdmin4 6.6, gunicorn 20.1.0, nginx 1.20.2 pip経由でインストールする。公式サイトを参考に。 pgAdmin 4 (Python) Download pgAdmin4用システムディレクトリを作成 # mkdir /var/lib/pgadmin # mkdir /var/log/pgadmin Python仮想環境用のディレクトリを作成してpgadmin4仮想環境を作成。 # mkdir /opt/software/python-venv # cd /opt/software/python-venv # python -m venv pgadmin4 仮想環境用スクリプト実行 # source pgadmin4/bin/activate pipの確認とアップグレード (pgadmin4)# python -m pip list (pgadmin4)# python -m pip install --upgrade pip setuptools pip経由でpgAdmin4のインストール。 (pgadmin4)# python -m pip install pgadmin4 pgAdmin4実行 (pgadmin4)# pgadmin4 このPCはLAN内の開発サーバー。ブラウザでアクセスして確認してみる。 表示できないのでファイヤーウォール確認 (pgadmin4)# systemctl status firewalld (pgadmin4)# firewall-cmd --list-all pgAdmin4の5050ポートを開けて確認 (pgadmin4)# firewall-cmd --add-port=5050/tcp --permanent (pgadmin4)# firewall-cmd --reload (pgadmin4)# firewall-cmd --list-all pgAdmin4実行 (pgadmin4)# pgadmin4 ブラウザでアクセスして確認する。 表示できない…。 別コンソールを開いてポートが空いているか確認。...

PostgreSQLのチューニング設定

データ分析用PostgreSQLを本番環境へインストールしてチューニングしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 Autovacuumの設定 autovacuumはデフォルトで有効。 track_countsもデフォルトでオンになっているので、特に設定しなかった。 参考:  PostgreSQL: Documentation: 14: 20.10. Automatic Vacuuming 参考:  autovacuumのチューニング要素について考えてみる - Qiita サーバーに合わせたチューニング設定 下記サイトを参考にしながら設定した。 チューニング ~データベースチューニング~|PostgreSQLインサイド : 富士通 【PostgreSQL】PostgreSQLのチューニング(設定編) - PEOPLE Engineering Blog # su - postgres $ cd 14/data/ $ less postgresql.conf max_connections = 200 shared_buffers = 512MB work_mem = 8MB maintenance_work_mem = 256MB rootに戻って再起動 # systemctl restart postgresql-14 # systemctl status postgresql-14 状態を監視 PostgreSQLでは組み込みの統計情報表示用Viewが用意されている。 参考サイト PostgreSQL: Documentation: 14: 28.2. The Statistics Collector PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料 データベースシステムの監視 ~監視方法と監視例~|PostgreSQLインサイド : 富士通 縦表示にしてrecruitテーブルの統計情報を見てみる。 # su - postgres $ psql # \x # select viewname from pg_views; # select * from pg_stat_databa...

PostgresSQLの言語設定(locale)をja_JPにする

データ分析用PostgreSQLの言語設定したときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 インストールは 前の記事 を参考に。 CentOSの言語設定を確認 # localectl status    System Locale: LANG=en_US.UTF-8        VC Keymap: jp106       X11 Layout: jp,us      X11 Variant: , OSは英語のままデータベースは日本語にする。 言語設定は照合順序に関係する。詳しくは下記公式サイトで。 23.1. ロケールのサポート | PostgreSQL PostgreSQL: Documentation: 14: 24.1. Locale Support OSで提供している言語設定一覧を確認 # locale -a ja_JPがない場合はこの記事の下を参照してインストール。 今のPostgreSQLの設定を確認 # su - postgres データベースのリストを表示 $ psql -l 既存のデータベースのCollate, Ctypeは変更できない。作り直す必要がある。 PostgreSQLの設定変更 $ cd 14/data/ $ less postgresql.conf lc_messages = 'ja_JP.UTF-8' # メッセージの言語 lc_monetary = 'ja_JP.UTF-8' # 通貨書式 lc_numeric = 'ja_JP.UTF-8'  # 数字の書式 lc_time = 'ja_JP.UTF-8'     # 日付と時刻の書式 rootに戻ってPostgreSQL再起動して確認 # systemctl restart postgresql-14 # systemctl status postgresql-14 ログが日本語になっているのは気持ち悪いので英語に戻す # less /var/lib/pgsql/14/data/postgresql.conf lc_messag...

PHPからPostgreSQLへ接続

PHPからPostgreSQLへ接続 → クエリを発行 → データ取得しているときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2, PHP 7.4.19 参考サイト PHP: PostgreSQL - Manual pgsqlインストール PHPからPostgreSQLに接続するためのextensionをインストール # dnf install php-pgsql /etc/php.d/20-pgsql.iniが作成された。 依存関係のlibpg5がpgdg-commonリポジトリからインストールされた。 これはPostgreSQLをインストールした際に追加されたリポジトリ。 確認 # php --ri pgsql pgsql PostgreSQL Support => enabled PostgreSQL(libpq) Version => 13.5 PostgreSQL(libpq)  => PostgreSQL 13.5 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-5), 64-bit Multibyte character support => enabled SSL support => enabled Active Persistent Links => 0 Active Links => 0 Directive => Local Value => Master Value pgsql.allow_persistent => On => On pgsql.max_persistent => Unlimited => Unlimited pgsql.max_links => Unlimited => Unlimited pgsql.auto_reset_persistent => Off => Off pgsql.ignore_notice => Off => Off pgsql.log_notice => Off => Off サンプルプログラム ローカルホストの...

pgAdmin4をCentOS8+Python3.9へインストールしようとして失敗

PostgreSQLを久しぶりに触ってウェブ版pgAdmin4をインストールしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2, pgAdmin4 6.5 インストールに成功した記事はこちら。 参考:  pgAdmin4をCentOS8にvenvでインストール 参考 pgAdmin - PostgreSQL Tools Download | pgAdmin 上記サイトを参考にインストール # dnf install pgadmin4-redhat-repo # dnf info pgadmin4-web # dnf install pgadmin4-web Package pgadmin4-redhat-repo-0.9-2.noarch is already installed. なぜかpgadmin4-redhat-repo-0.9-2をインストールしようとしている… cleanして再実行 # dnf clean all # dnf install pgadmin4-web …変わらずインストールできないので、リポジトリ情報だけ残して削除。 # cd /etc/yum.repos.d/ # cp pgadmin4.repo pgadmin4.repo.bak # dnf remove pgadmin4-redhat-repo # mv pgadmin4.repo.bak pgadmin4.repo # dnf install pgadmin4-web 依存関係でPython3.6をインストールするので止めた。 前の記事 でPython3.9に変更したばっかり。 pip経由でインストールすることにした。 # pip install pgadmin4 エラー ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. pyopenssl 22.0.0 requires cry...

CentOS8にPostgreSQLをインストール。Windows10からDBeaverで接続

久しぶりにPostgreSQLをインストールしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.2 CentOSにPostgreSQLのインストール リポジトリにあるposgresql-serverのバージョンを確認。 # dnf search postgresql # dnf info postgresql-server Available Packages Name         : postgresql-server Version      : 10.19 Release      : 1.module_el8.6.0+1047+4202cf9a Architecture : x86_64 # dnf module list postgresql 最新バージョンv14を公式ページに従ってインストールすることにした。 参考:  PostgreSQL: Linux downloads (Red Hat family) # dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm # dnf -qy module disable postgresql インストール # dnf install postgresql14-server 初期化して自動起動Onしてサーバー起動 # /usr/pgsql-14/bin/postgresql-14-setup initdb # systemctl enable postgresql-14 # systemctl start postgresql-14 バージョン確認 # psql --version psql (PostgreSQL) 14.2 設定ファイル(pg_hba.confなど)の場所確認。起動オプションで与えられているはず。 # systemctl status postgresq...

グループウェア「Aipo」を別サーバーに移行

イメージ
移行作業をしたときの覚書。ちなみにAipoのインストール・導入は初めて。 環境 移行元: CentOS 5.10, Aipo 7.0.2.0 移行先: CentOS 6.7, Aipo 7.0.2.0   参考 インストール手順 - オープンソース|無料グループウェア「アイポ」   目次 移行先に必要なライブラリをインストール 同じバージョンのAipoを移行先にインストール 移行元からデータを移行 移行先サーバーでリストア nginxにリバースプロキシの設定   1.移行先に必要なライブラリをインストール 移行先のサーバーで必要なライブラリをインストールする。 # yum install gcc nmap lsof unzip readline-devel zlib-devel sudo   2.同じバージョンのAipoを移行先にインストール 公式サイトのダウンロード から移行元と同じバージョンをダウンロードしてくる。 解凍して/usr/localに配置 # tar -xzvf aipo7020aja_linux64.tar.gz # cd aipo7020aja_linux # tar -xzvf aipo7020.tar.gz # mv aipo /usr/local/ インストール実行 # cd /usr/local/aipo # sh ./bin/installer.sh ファイヤーウォール設定 # system-config-firewall-tui ポート番号: 81 プロトコル: tcp スタートしてみる # ./bin/startup.sh found temp directory Using CATALINA_BASE:   /usr/local/aipo/tomcat Using CATALINA_HOME:   /usr/local/aipo/tomcat Using CATALINA_TMPDIR: /usr/local/aipo/tomcat/temp Using JRE_HOME:        /usr/local/aipo/....

pg_rmanを使ってPostgreSQLを別サーバーにバックアップ

PostgreSQLのバックアップに便利な方法はないものかと、試しに pg_rman をコンパイル、インストール、設定したときのメモ。環境はCentOS5 pg_rmanはPostgreSQLのデータを簡単なコマンドでバックアップ・リストアできるツール。ダウンロードは Google Codeのプロジェクトページ から。 インストールの方法は 公式のwiki にもあるし、 ここのサイト も分かりやすい。 以下自分でやったコマンドのメモ。pg_configにパスが通ってないとダメらしいので、パスの追記から。 # vi ./.bashrc PATH=/usr/local/pgsql/bin:$PATH export PATH # source ./.bashrc もしくはPostgreSQLがインストールされた場所に書き込み権限があればいいので、postgresをownerにする。 # chown postgres. -R /usr/local/pgsql # su postgres コンパイルしてインストール。 # tar xzvf pg_rman-1.1.2.tar.gz # cd pg_rman  # make USE_PGXS=1 # make USE_PGXS=1 install 環境変数を設定 # su postgres $ cd $ vi ./.bashrc export PGDATA=/usr/local/pgsql/data export BACKUP_PATH=/mnt/backup/pgsql $ source ./.bashrc 環境変数が設定できたかどうか確認 $ echo $BACKUP_PATH pg_rmanを初期化 $ pg_rman init -B  $BACKUP_PATH WARNING: ARCLOG_PATH is not set because archive_command is empty INFO: SRVLOG_PATH is set to '/usr/local/pgsql/data/pg_log' archive_mode=off...

PostgreSQL 9.0.1でレプリケーションを設定

PostgreSQL 9.0からレプリケーションの機能がネイティブで実装されたので試しにコンパイルしてインストールしてみた。環境はCentOS 新機能については下記サイトを参考に PostgreSQL 9.0 の新機能 ソースのダウンロードは 本家のサイト から。コンパイルとインストールは 前の記事 を参考に。レプリケーションの設定は ここ のサイトを参考にした。 まずはプライマリー(マスター)側の設定。 postgresql.confを変更。各設定項目の意味は 公式サイトのドキュメント を参照。 # vi /usr/local/pgsql/data/postgresql.conf wal_level = hot_standby archive_mode = on archive_command = 'cp %p /usr/local/pgsql/data/pg_archive/%f' max_wal_senders = 3 archive_commandで指定した保存ディレクトリを作成 # mkdir /usr/local/pgsql/data/pg_archive # chown postgres. /usr/local/pgsql/data/pg_archive pg_hba.confにレプリケーション接続許可するIPの範囲を設定 # vi /usr/local/pgsql/data/pg_hba.conf host replication all 192.168.100.0/24 trust これで再起動 # /etc/rc.d/init.d/postgresql restart   次にスタンバイ(スレイブ)側を設定 postgresql.confをプライマリーと同じように編集して無事起動することを確認。 # vi /usr/local/pgsql/data/postgresql.conf # mkdir /usr/local/pgsql/data/pg_archive # chown postgres. /usr/local/pgsql/data/pg_archive # /et...

PostgreSQLにCSVデータをファイルから取り込む

旧システムから新システムへデータ移行を行ったときのメモ。 CSVを取り込む前に対応するテーブルがないと始まらないので、create tableのsqlをゲットするか、csvの1行目を見てテーブルを作成するプログラムを作ったりする。 対応するテーブルがあれば、 COPY コマンドを使えば簡単にできる。 # su postgres $ psql test-db test-db=# \copy table1 from /opt/csv/table1.csv WITH CSV HEADER 「WITH CSV」を付けるとCSVファイルと認識して、カンマ区切りのデータとして扱ってくれる。 「HEADER」を付けると1行目を無視する。 csvファイルは取り込むDBに合わせて、エンコーディングする必要があるみたい。 ちなみに私が愛用しているエディタ xyzzy では ここ にあるスクリプトを使えば、フォルダ内のファイルを一括で文字コード変換ができる。 一括でやる場合は\copy文をファイルに記述して test-db=# \i /opt/csv/copy.sql を実行するば出来る。   <2010/08/23 追記> コメントで指摘があったので、追記。エンコーディングもコマンドで指定すればできる。 こちらの記事 を参考に。