#author("2021-05-14T07:42:17+00:00","default:admin","admin") *他DBMSとの比較 [#l3bb28f8] -[[MariaDB vs MySQL vs PostgreSQL比較:最適なRDBは?ベンチマーク付選択フローチャート:https://vpshikaku.com/mariadb-mysql-postgresql/]] -[[3種類のデータベースを徹底解説!(PostgreSQL、MySQL、SQLite):https://bigdata-tools.com/sql-db/]] -[[PostgreSQLとMariaDBを比較:https://www.ossnews.jp/compare/PostgreSQL/MariaDB]] -[[MariaDB(MySQL) PostgreSQL どちらを選ぶか?:https://qiita.com/rdonster/items/3d3a83b311dcdfb86fb0]] -[[MySQL/MariaDBではなくPostgreSQLを選ぶ理由:https://developers.srad.jp/story/15/03/22/0550213/]] **特徴 [#d579e364] -PostgreSQLはJSON(=jsonb型)はNative Indexをサポートしている為、中途半端なVirtual Columnという仕組みでIndexを模してるMariaDB(MySQL)とは、JSON型で値へのアクセス速度が必要になった場合速度が断然違う(速い) -REST APIを提供するPostgREST、GraphQL APIを提供するGraphileといったものがあり、JSON利用が簡単&性能が出る=モバイルアプリ&Single Page Application開発がより少ない負担で出来る -PostGISによるGIS機能のサポートが充実 -MariaDBより機能が多い -データのエラー判定がMariaDBより厳格で、想定外の値処理による不正な値処理の正常扱い通過が起きにくい -1テーブルが持てる索引の数にMariaDB/MySQLの様な制限(64個)がない *運用事例 [#ta444c13] -[[大規模監視サーバでのPostgreSQL:https://www.pgecons.org/wp-content/uploads/2020/02/PGECons_20200212_Seminar_3_SRA.pdf]] -[[コニカミノルタ系がSQL Serverから「PostgreSQL」に移行した訳と、直面した壁:https://techtarget.itmedia.co.jp/tt/news/2010/02/news03.html]] *JSON型 [#ub17ac1d] -[[【PostgreSQL】 jsonb型カラムをSQLで検索・集計したい:https://blog.serverworks.co.jp/postgres_jsonb_search]] -[[PostgreSQL JSON型についての使い勝手とパフォーマンス、時々ハマりどころの調査:https://qiita.com/ma2shita/items/d491fed37d5ffe616198]] -[[PostgreSQLメモ:JSON, JSONB型の登録・検索・更新:https://qiita.com/Nyokki/items/4033fc0b6d8be44f3ceb]] -[[PostgreSQLにおけるjson/jsonb型の取り扱い:https://rinoguchi.net/2021/03/postgresql-json.html]] -[[【最新版】PostgreSQLのJSONの仕様 – 各バージョンのリリース内容:https://yu-report.com/entry/postgresqlverJson/]] -[[PostgreSQLのJSONB型を利用してタグ検索を行う:https://blog.ohgaki.net/should-use-postgresql-for-tag-search-json]] -[[PostgreSQL 9.3 の JSON サポートについて(長いよッ):https://qiita.com/kumazo/items/483f47360f8b61a9fbb9]] -[[PostgreSQL 9.4 の JSON サポートについて:https://qiita.com/kumazo/items/9010f9dad134b9d9d16d]] **JSONB [#hecbdfc5] -[[PostgreSQLでのJSONBデータの使い方(展開、結合、集約):https://qiita.com/kyv28v/items/15a3668b1ba266de5994]] -[[PostgreSQL の JSONB 型の紹介とメリット:https://www.bokukoko.info/entry/2017/07/02/211449]] *hstore型 [#s988aa27] -[[PostgreSQLのhstore型を操作するSQL構文まとめ:https://qiita.com/f-murakami/items/327047a1bf34393a86a3]] *VACUUM [#z48c9259] -[[【PostgreSQL】VACUUMとは、VACUUM FULLの実行:https://postgresweb.com/post-5194]] -[[PostgreSQL VACUUM で年末大掃除:https://www.techscore.com/blog/2018/12/18/postgresql-vacuum%E3%81%A7%E5%B9%B4%E6%9C%AB%E5%A4%A7%E6%8E%83%E9%99%A4/]] -[[VACUUMがdead rowsを削除しない3つの理由(Cybertec Blogより):https://yakst.com/ja/posts/5174]] -[[24.1.定期的な掃除機がけ:https://runebook.dev/ja/docs/postgresql/routine-vacuuming]] **概要 [#m59788b8] -Vacuum処理とは、データ削除などで生じた不要領域の回収などを行う処理 -PostgreSQL 9.5で、複数のテーブルを対象にパラレル処理でVacuumを行える機能が追加された -PostgreSQL 13では同一テーブル内で複数のインデックスを対象に並列処理が可能になった **AUTO VACUUM機能 [#bde57ce5] -[[PostgreSQL 13 自動バキューム(AUTO VACUUM):https://changineer.info/server/postgresql/postgresql_auto_vacuum.html]] -[[自動VACUUMの状況を確認する:https://qiita.com/mkyz08/items/ffc34c13510bd1c5adb1]] -PostgreSQLには「AUTO VACUUM」機能が搭載されており、自動で随時VACUUMが実行されるため、多くの場合問題とならない -テーブルによって追加・更新・削除の頻度、規模は様々であるため、AUTO VACUUM機能によるVACUUM実行のタイミングが適切でないケースが出てくる **VACUUMに関する注意点 [#h0906007] -VACUUM FULLはテーブルに排他ロックを必要とするうえ、処理に非常に長い時間を要する。そのため、VACUUM FULLの実行がサービス障害につながることもありえる。 -VACUUM FULLが必要とならないよう、普段から適切にVACUUMが実行されるようにAUTO VACUUMのパラメータ調整や、各テーブルのVACUUM実行状況の監視が大切 **ログ [#sb62775e] -[[VACUUMのログの読み方(VACUUM VERBOSE):https://masahikosawada.github.io/2020/06/01/Reading-Vacuum-Verbose/]] *パフォーマンスチューニング [#m884fd4d] -[[パフォーマンスチューニング9つの技 ~「基盤」について~:https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/tuningrule9-base/]] -[[第9回 パフォーマンス・チューニング(前編):https://oss-db.jp/dojo/dojo_info_09]] -[[第10回 パフォーマンス・チューニング(後編):https://oss-db.jp/dojo/dojo_info_10]] *バックアップ・リストア [#ff69914d] -[[PostgreSQL 特定のデータベースのバックアップとリストア:https://www.kakiro-web.com/postgresql/postgresql-database-backup-restore.html]] -[[PostgreSQLのダンプとリストア:https://qiita.com/kame_hitoshi/items/0caca3615764fd566a1c]] -[[PostgreSQLのbackup, restore方法まとめ:https://qiita.com/rice_american/items/ceae28dad13c3977e3a8]] -[[技術を知る:PostgreSQLのバックアップとリカバリーPostgreSQLインサイド:https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/backup-recovery/]] -[[PostgreSQLのデータベースを強制削除する:https://hnakamur.github.io/memo/force-delete-postgresql-database.html]] **ファイル形式 [#tc5c14d7] ***スクリプト形式 [#g0eb27f7] -スクリプト形式の出力は、リストアに必要なSQL文の羅列が出る -psqlコマンドでリストア -スクリプト形式の場合はプレーンテキストなので、リストアの際にエラーが出たら、中を見れるという利点がある ***アーカイブ形式 [#uaf8671e] -バイナリの形で出力される -リストアはpsqlコマンドでなくpg_restoreコマンドで行う -アーカイブ形式の利点は、 「指定したtableのみを選択してリストアできる」 -アーカイブ形式には以下の2種類がある --custom形式 --tar形式 -custom形式はdefaultで圧縮されるので、ファイルサイズが小さくなる **バックアップ [#leaccb69] **リストア [#z6b187f0] **バッチファイル [#d3d007a5] ***backup.bat [#m7a29006] set USER=postgres pg_dump --create --clean --if-exists --inserts -U %USER% -d %1 > %2 ***force_terminate_connection.sql [#g376e84f] select * from pg_database where datname = 'XXXX'; update pg_database set datallowconn = 'false' where datname = 'XXXX'; alter database XXXX connection limit 1; select pg_terminate_backend(pid) from pg_stat_activity where datname = 'XXXX'; -上記 XXXX を対象DBに書き換え -参考)[[PostgreSQLのデータベースを強制削除する:https://hnakamur.github.io/memo/force-delete-postgresql-database.html]] ***restore.bat [#mb4c60c4] set USER=postgres psql -U %USER% -f force_terminate_connection.sql psql -U %USER% -f %1 *ODBCドライバ [#j6db8c0d] -[[Windows用 (msi):https://www.postgresql.org/ftp/odbc/versions/msi/]] --一番下が最新 -[[psqlODBC (PostgreSQLむけODBCドライバ):https://www.sraoss.co.jp/tech-blog/pgsql/psqlodbc/]] **インストール [#p095dd80] -[[クライアント端末にODBCドライバをインストールする:https://www.projectgroup.info/documents/PostgreSQL/POS_000008.html]] -!!! システム DSN に追加すべし !!! **DSN [#vcfe1730] -[[DSN (データ ソース名) とは何ですか。:https://support.microsoft.com/ja-jp/help/966849/what-is-a-dsn-data-source-name]] -システム DSN --システム全体で使用される DSN --プログラムが使用されているマシンでは、この DSN を作成しなければならない --レジストリキー:HKEY_LOCAL_MACHINE\Software\Odbc\Odbc.ini\Odbc データ ソース -ユーザー DSN --特定のユーザー用に作成された DSN --DSN を作成したユーザーのみ使用することができる --レジストリキー:HKEY_CURRENT_USER\Software\Odbc\Odbc.ini\Odbc データ ソース -ファイル DSN --DSN を含むテキストをテキストファイルに格納 --データソースに接続するための情報をファイルに格納するので,ODBC.INIやレジストリから情報を取得しないで接続を確立できる **ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。 [#nc3f1938] -まずは「システム DSN」にドライバーを追加しているか確認 --プログラムが使用されているマシンでは「システム DSN」を作成しなければならない -[[データ ソース名および指定された既定のドライバーが見つかりません:https://wsbs.wordpress.com/2016/12/07/%E3%83%87%E3%83%BC%E3%82%BF-%E3%82%BD%E3%83%BC%E3%82%B9%E5%90%8D%E3%81%8A%E3%82%88%E3%81%B3%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E6%97%A2%E5%AE%9A%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90/]] -[[[Microsoft] [ODBC Driver Manager]データソース名が見つからず、デフォルトのドライバーが指定されていません:https://www.it-swarm.dev/ja/odbc/microsoft-odbc-driver-manager%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E5%90%8D%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%9A%E3%80%81%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%8C%E6%8C%87%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93/1073338620/]] -[[PowerShellからPostgreSQLに接続時に既定のドライバーが見つからないと表示された:https://buralog.jp/postresql-odbc-connection-error/]] --psqlodbc x64をアンインストールして、psqlodbc x86をインストールしなおしたら解決しました。 -[[windows 64bitのODBCドライバ:http://blog.syo-ko.com/?eid=223]] **IISとの接続トラブル [#ddac486d] -[[IISでODBC利用時のアクセス権限:http://prometa.seesaa.net/article/107793788.html]] --レジストリ「HKLM \ SOFTWARE \ Microsoft \ ODBC \ ODBC.INI」に、IISの実行ユーザに対するアクセス許可を与える ---「ファイル名を指定して実行」で「regedit」を実行 ---表示されたレジストリエディタのダイアログにて、ODBC.INIを右クリックし、「アクセス許可」を選択 ---「ODBC.INIのアクセス許可」のダイアログが表示されるので、追加ボタンを押し、IISの実行ユーザを登録 -[[Windows2008に移行したらODBC接続が出来なくなった:https://asanono.hatenadiary.org/entry/20100728/1280311414]] *インストール [#tea191b1] **Windows [#m0369b6d] -[[PostgreSQLのインストール方法【Windows】:https://proengineer.internous.co.jp/content/columnfeature/6727]] -[[【初心者向け】PostgreSQLのダウンロード及びインストール方法:https://eng-entrance.com/postgresql-download-install]] -[[WindowsでPostgreSQLが使いたいゾウ:https://tivel.jp/archives/11002]] **Mac OS X [#g3ce3b03] 1. インストール $ ./configure オプション $ make $ sudo make install(デフォルトでは/usr/local/pgsqlにインストールされる) 2. 共有メモリ関係の設定変更 /etc/sysctl.conf がある場合は、このファイルを以下のように編集 kern.sysv.shmmax=167772160 kern.sysv.shmall=65536 kern.sysv.shmmin=1 kern.sysv.shmseg=8 kern.sysv.shmmni=32 ない場合は、/etc/rc の64行目付近を以下のように編集 sysctl -w kern.sysv.shmmax=167772160 kern.sysv.shmmin=1 kern.sysv.shmmni=32 kern.sysv.shmseg=8 kern.sysv.shmall=65536 編集後、Macを再起動し、ターミナルを起動。以下のコマンドを打って変更が反映されているか確認。 $ sysctl -a | grep kern.sysv kern.sysv.shmmax: 167772160 kern.sysv.shmmin: 1 kern.sysv.shmmni: 32 kern.sysv.shmseg: 8 kern.sysv.shmall: 65536 : 3. postgres というユーザーを作成 4. "su - postgres" でpostgresユーザーになって以下を実行 $ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data $ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l postgres.log start $ /usr/local/pgsql/bin/createdb test $ /usr/local/pgsql/bin/psql test 5. 自動起動の設定 http://www.entropy.ch/software/macosx/postgresql/ より~ pgsql-startupitem-1.2.pkg.tar.gz をダウンロードしてインストール *設定 [#b23bcf37] **パスワード変更 [#k3a45985] -[[PostgreSQLのパスワードを初期化:https://www.flyenginer.com/low/low_db/postgresql_low/postgresql%E3%81%AE%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96.html]] *ツール [#s3c253b9] **pgAdmin4 [#j84822ca] -[[PostgreSQL pgAdmin 4の使い方(起動からデータ参照):https://itsakura.com/pgadmin4-db-create]] *Azure Database for PostgreSQL [#rff6760c] -[[【第1回】基本から始める Azure Database for PostgreSQL 【PostgreSQL (オンプレミス)(1)】:https://www.nobtak.com/entry/pg01]] -[[【第2回】基本から始める Azure Database for PostgreSQL 【PostgreSQL (オンプレミス)(2)】:https://www.nobtak.com/entry/pg02]] -[[【第3回】基本から始める Azure Database for PostgreSQL 【PostgreSQL (オンプレミス)(3)】:https://www.nobtak.com/entry/pg03]] -[[【第4回】基本から始める Azure Database for PostgreSQL 【基本1】:https://www.nobtak.com/entry/pg04]] *サポート [#s62c9f8f] -[[PosggreSQL Versioning Policy:https://www.postgresql.org/support/versioning/]] -[[PostgreSQL Support:https://www.postgresql.org/support/]] -[[サービス一覧 - PostgreSQL エンタープライズ・コンソーシアム:https://www.pgecons.org/postgresql-info/services/]] -[[OS・ミドルウェアのサポート終了期限:https://qiita.com/tokamon/items/07030fcef453293a94b8]] *リンク集 [#l2475a8e] -[[PostgreSQL:http://www.postgresql.org/]] -[[Max OS Xのパッケージ配布:http://www.entropy.ch/software/macosx/postgresql/]] -[[PostgreSQLのインストール:http://homepage.mac.com/reefedge/osx/index_4.html#postgres]] -[[PostgreX:http://www.magic3.org/postgrex/]]