ユーザ用ツール

サイト用ツール


it技術:データベース:postgresql

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
it技術:データベース:postgresql [2020/04/06 11:06] – [設定について] yajuadminit技術:データベース:postgresql [2020/10/18 02:54] – [PostgreSQL13情報] yajuadmin
行 54: 行 54:
 |11.0|2018/10/18|[[it技術:データベース:postgresql#postgresql11情報|postgresql11情報]] | |11.0|2018/10/18|[[it技術:データベース:postgresql#postgresql11情報|postgresql11情報]] |
 |12.0|2019/10/03|[[it技術:データベース:postgresql#postgresql12情報|postgresql12情報]] | |12.0|2019/10/03|[[it技術:データベース:postgresql#postgresql12情報|postgresql12情報]] |
 +|13.0|2020/09/24|[[it技術:データベース:postgresql#postgresql13情報|postgresql13情報]] |
 +
 ==== Postgres10情報 ==== ==== Postgres10情報 ====
 2017-10-05にリリース 2017-10-05にリリース
行 92: 行 94:
 [[https://www.postgresql.org/about/press/presskit12/ja/|PostgreSQL 12 プレスキット]]\\ [[https://www.postgresql.org/about/press/presskit12/ja/|PostgreSQL 12 プレスキット]]\\
 [[https://mag.osdn.jp/19/10/04/163000|「PostgreSQL 12」リリース、性能面でさまざまな強化が行われる]]\\ [[https://mag.osdn.jp/19/10/04/163000|「PostgreSQL 12」リリース、性能面でさまざまな強化が行われる]]\\
-[[https://www.publickey1.jp/blog/19/postgresql_12bjson.html|PostgreSQL 12が正式リリース。Bツリー周りの改善による性能向上、JSONパスによる抽出可能など]]+[[https://www.publickey1.jp/blog/19/postgresql_12bjson.html|PostgreSQL 12が正式リリース。Bツリー周りの改善による性能向上、JSONパスによる抽出可能など]]\\ 
 +[[https://www.slideshare.net/nttdata-tech/postgresql12-performance-improvement-pluggable-storage-engine-ntt-sawada|PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ - SlideShare]]
  
  
行 101: 行 104:
   * テーブルアクセスメソッドに対応   * テーブルアクセスメソッドに対応
  
 +=== 注意 ===
 +  * WITH OIDが使えなくなった。WITH OIDSがあるテーブルがあるとpg_upgradeが実行できない
 +  * recovery.confはなくなりpostgresql.confに統合
 +==== PostgreSQL13情報 ====
 +2020-09-24にリリース
 +
 +=== 主な新機能 ===
 +[[https://www.postgresql.org/about/press/presskit13/ja/|PostgreSQL 13 プレスキット]]\\
 +[[https://www.sraoss.co.jp/tech-blog/pgsql/pg13report/|PostgreSQL 13 検証報告]]\\
 +[[https://news.mynavi.jp/article/20200525-1040900/|PostgreSQL 13で登場する新機能まとめ]]\\
 +[[https://qiita.com/nuko_yokohama/items/e253dd2619c639558a23|PostgreSQL 13がやってくる!(6) - psqlの改善あれこれ]]\\
 +[[https://www.slideshare.net/nttdata-tech/postgresql13-pg-stat-statements-nttdata-fujii|PostgreSQL 13でのpg_stat_statementsの改善について - SlideShare]]\\
 +[[https://www.slideshare.net/nttdata-tech/postgresql13-pg-stat-statements-nttdata-fujii|PostgreSQL 13でのpg_basebackupの改善について - SlideShare]]\\
 +[[https://www.slideshare.net/nttdata-tech/postgresql13-replication-nttdata-fujii|PostgreSQL 13でのレプリケーション関連の改善について - SlideShare]]
 +
 +  * B-Treeインデックスの性能向上
 +  * 新しい実行プラン
 +  * パーティションテーブル機能の拡張
 +  * パラレルVACUUM
 +  * 進捗レポートビューの拡張
 +  * pgbenchの拡張
 +  * pg_rewindの拡張
 +  * SQL機能の追加
 ===== 設定について ===== ===== 設定について =====
 postgresql.confの設定値は、下記SQLで context の値により設定反映のタイミングが違う。 postgresql.confの設定値は、下記SQLで context の値により設定反映のタイミングが違う。
行 212: 行 238:
 [2020-03-28 15:45:06 JST] postgres postgres 8512[2] LOG:  connection authorized: user=postgres database=postgres [2020-03-28 15:45:06 JST] postgres postgres 8512[2] LOG:  connection authorized: user=postgres database=postgres
 </code> </code>
 +
 +=== 実行されたクエリを記録 ===
 +調査の時に行うくらい。実行するSQLが多いので運用時はコメントアウトにしている。
 +
 +<code .conf postgresql.conf>
 +log_statement = ‘all’
 +</code>
 +
 +[[https://www.casleyconsulting.co.jp/blog/engineer/4470/|PostgreSQLで実行されたクエリからバグを探してみた(Windows編)]]
 ==== 接続子の優先設定変更 ==== ==== 接続子の優先設定変更 ====
 postgresql.confの下記設定を変更することによって、スキーマ名未設定でSQL実行時に選択されるスキーマの優先度を変更できる。 postgresql.confの下記設定を変更することによって、スキーマ名未設定でSQL実行時に選択されるスキーマの優先度を変更できる。
行 239: 行 274:
 postgresqlの特性上、1度エラーが出ると以降のSQLは全てエラー(commit/rollbackするまで)になります。\\ postgresqlの特性上、1度エラーが出ると以降のSQLは全てエラー(commit/rollbackするまで)になります。\\
 エラーは無視して、OKなSQLだけ実行したい場合、ファイルの先頭に下記を記述する。 エラーは無視して、OKなSQLだけ実行したい場合、ファイルの先頭に下記を記述する。
 +
 +<wrap em>※COPY句のCSV登録時のエラーには関係しない</wrap>
  
 <code> <code>
行 244: 行 281:
 </code> </code>
  
 +  * [[https://web.archive.org/web/20110610035711/http://postgresql.g.hatena.ne.jp/iakio/20081120/1227202633|エラーの後にロールバックしなければいけない理由]]
   * [[https://blog.goo.ne.jp/pianyi/e/4d633732dc2b1953d9563815f61f9eb3|Postgresql で探していたものが見つかった!]]   * [[https://blog.goo.ne.jp/pianyi/e/4d633732dc2b1953d9563815f61f9eb3|Postgresql で探していたものが見つかった!]]
   * [[https://kotaeta.com/55381151|エラーがあってもPostgreSQLスクリプトを続行させるオプションを設定する方法はありますか?]]   * [[https://kotaeta.com/55381151|エラーがあってもPostgreSQLスクリプトを続行させるオプションを設定する方法はありますか?]]
  
 +===== ビュー定義 =====
 +==== 自動変換 ====
 +ビュー作成時に整形したりコメントを付けたとしても、ビューに登録された段階で自動変換されて型変換が付いたり整形が崩れたりコメントが消去されてしまう。
 +
 +==== 型変換エラー ====
 +ビューで「cannot change data type of view column」で間違っていないのに登録できない場合、ビューを削除して再作成すると登録できるようになる。
 +
 +===== ユーザ定義関数 =====
 +==== 動的クエリ ====
 +「EXECUTE sql;」として、動的クエリを実行させる。また、「RETURN QUERY」としてテーブルを返す。\\
 +[[http://shin-hanuman.blogspot.jp/2011/06/postgresql.html|PostgreSQL めも - ストアドプロシージャ]]
 +
 +SQLの文字列の値セットにformat関数で指定している。\\
 +[[https://www.postgresql.jp/document/9.3/html/functions-string.html|9.4.1. format]]\\
 +format指示子の出力を生成するのに使用されるフォーマット変換の型。 以下の型がサポートされています。
 +  * 「%s」は引数の値を単純文字列にフォーマットします。 NULL値は空文字列として扱われます。
 +  * 「%I」は、必要とされれば二重括弧で括られたSQL識別子として引数値を取り扱います。 NULL値はエラーです。
 +  * 「%L」は引数値をSQLリテラルとして引用します。NULL値は引用符無しでNULL文字列として表示されます。
 +
 +<code sql>
 +CREATE OR REPLACE FUNCTION wiremodule(_carline TEXT, _part TEXT, _module TEXT) 
 +RETURNS TABLE(drawingno text, wirename text) AS $$
 +DECLARE
 +  i INTEGER;
 +  sql TEXT;
 +  cat TEXT; 
 +BEGIN
 +  sql := format('SELECT drawingno::text, wirename::text FROM wire WHERE carline=%L AND part=%L AND (' , _carline, _part);
 +
 +  cat := '';
 +  FOR i IN 1..4 LOOP
 +     sql := sql || cat || format('functionmodule%s=%L', i , _module);
 +     cat := ' OR ';
 +  END LOOP;
 +  sql := sql || ')';
 +
 +  RETURN QUERY EXECUTE sql;
 +
 +END;
 +$$ LANGUAGE 'plpgsql';
 +</code>
 +
 +==== デバッグ ====
 +デバッガ画面でトレースは出来るが、不安定である(ステップアウトで応答が返らない)。\\
 +  * [[http://pgsqldeepdive.blogspot.jp/2013/05/plpgsqldebugger.html|PL/pgSQLデバッガを使ってみよう]]
 +  * [[http://qiita.com/hasu0612/items/a650f720c580a6d400b1|[PostgreSQL] pgAdminでデバッグする方法]]
  
 +従来のメッセージ出力によるデバッグ方法もある。
 +  * [[http://db.just4fun.biz/?PL/pgSQL/%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B|PL/pgSQL/ターミナルにメッセージを表示する]]
  
 ===== エクスポート ===== ===== エクスポート =====
行 320: 行 406:
 対応は、空欄は二重引用符を除去する置換処理を追加する。 対応は、空欄は二重引用符を除去する置換処理を追加する。
  
 +COPY句でFORCE_NULLを指定すれば、2重引用符のみをNULLで登録できる。
 +https://www.postgresql.jp/document/11/html/sql-copy.html
 +
 +WITHの書き方をこれまでと変える必要があるのと、FORCE_NULLの時にカラムを指定する必要がある。
 +
 +<code sql>
 +\COPY tablename(col1,col3,col4,col2) FROM pathName WITH encoding 'UTF8' CSV HEADER NULL AS '';
 +                                                     ↓
 +\COPY tablename(col1,col3,col4,col2) FROM pathName WITH(ENCODING 'UTF8',FORMAT CSV,HEADER ON,NULL '',FORCE_NULL(col1,col3,col4,col2));
 +</code>
 === COPYで読み込みエラー === === COPYで読み込みエラー ===
 「読み取り用にオープンできませんでした: Permission denied」が出た場合、参照フォルダのプロパティのセキュリティタブにて"Network Service"アカウント、または、"Everyone"アカウントを追加する。 「読み取り用にオープンできませんでした: Permission denied」が出た場合、参照フォルダのプロパティのセキュリティタブにて"Network Service"アカウント、または、"Everyone"アカウントを追加する。
行 360: 行 456:
  
 <code sql> <code sql>
-select relname, n_live_tup from pg_stat_user_tables where schemaname='wh_kousei'+select relname, n_live_tup from pg_stat_user_tables where schemaname='test'
 </code> </code>
 [[http://d.hatena.ne.jp/sorayukinoyume/20101202/1291304017|PostgreSQLでテーブルの行数を速く取得する方法]] [[http://d.hatena.ne.jp/sorayukinoyume/20101202/1291304017|PostgreSQLでテーブルの行数を速く取得する方法]]
it技術/データベース/postgresql.txt · 最終更新: 2024/02/23 21:20 by yajuadmin