ユーザ用ツール

サイト用ツール


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


差分

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

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
it技術:データベース:postgresql [2020/03/29 12:52]
yajuadmin [ログ出力設定変更]
it技術:データベース:postgresql [2020/10/18 15:31] (現在)
yajuadmin [PostgreSQL12情報]
行 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]]\\ 
 +[[https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/partitioning-performance/|技術者に聞く:パーティショニングにおける性能改善への取り組み PostgreSQLインサイド]]
  
   * JSON Pathに対応   * JSON Pathに対応
行 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 の値により設定反映のタイミングが違う。
 +<code sql>
 +-- postgresユーザーで実行
 +select name, context from pg_settings;
 +</code>
 +
 +^設定反映のタイミング^^
 +^context^説明^
 +|不可(internal)|ユーザー設定変更が出来ない|
 +|起動(postmaster)|PostgreSQLの再起動で反映される|
 +|再読み込み(signup)|pg_ctl reload でも反映できる|
 +|スーパーユーザーのみ(suset)|スーパーユーザーによるSET文でも反映できる|
 +|いつでも(user)|一般ユーザーによるSET文でも反映できる|
 +
 +サーバー上の管理者権限で「pg_ctl reload」コマンドでpostgresql.confの設定値を反映
 +<code bash>
 +>pg_ctl reload -D "F:\Program Files\PostgreSQL\9.6\data"
 +サーバにシグナルを送信しました
 +</code>
 +
 +
 ==== 他ホストから接続するための設定変更 ==== ==== 他ホストから接続するための設定変更 ====
 コメントを外す。「localhost」から「*」に変更する。これをしないとlocalhostしか接続できない。\\ コメントを外す。「localhost」から「*」に変更する。これをしないとlocalhostしか接続できない。\\
行 141: 行 188:
 log_line_prefix='[%t] %u %d %p[%l] ' # special values: log_line_prefix='[%t] %u %d %p[%l] ' # special values:
 </code> </code>
-※変更後は、PostgreSQLサービス再起動+※変更後は、PostgreSQLサービス再起動またはpg_ctl reloadで反映
  
  
行 159: 行 206:
 ^log_line_prefix^^^ ^log_line_prefix^^^
 ^エスケープ^効果^セッションのみ^ ^エスケープ^効果^セッションのみ^
-|%a|アプリケーション名|○|+|%a|アプリケーション名 例 psql または [unknown]|○|
 |%u|ユーザ名|○| |%u|ユーザ名|○|
 |%d|データベース名|○| |%d|データベース名|○|
行 191: 行 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実行時に選択されるスキーマの優先度を変更できる。
行 218: 行 274:
 postgresqlの特性上、1度エラーが出ると以降のSQLは全てエラー(commit/rollbackするまで)になります。\\ postgresqlの特性上、1度エラーが出ると以降のSQLは全てエラー(commit/rollbackするまで)になります。\\
 エラーは無視して、OKなSQLだけ実行したい場合、ファイルの先頭に下記を記述する。 エラーは無視して、OKなSQLだけ実行したい場合、ファイルの先頭に下記を記述する。
 +
 +<wrap em>※COPY句のCSV登録時のエラーには関係しない</wrap>
  
 <code> <code>
行 223: 行 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/ターミナルにメッセージを表示する]]
  
 ===== エクスポート ===== ===== エクスポート =====
行 299: 行 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"アカウントを追加する。
行 339: 行 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.1585453941.txt.gz · 最終更新: 2020/03/29 12:52 by yajuadmin