<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PostgreSQL 10.2 &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/postgresql-10-2/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Fri, 23 Oct 2026 06:21:50 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2018/07/blog-icon-150x150.png</url>
	<title>PostgreSQL 10.2 &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>PostgreSQL 10.3 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/10-3/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 08 Mar 2018 08:33:36 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 10]]></category>
		<category><![CDATA[PostgreSQL 10.2]]></category>
		<category><![CDATA[PostgreSQL 10.3]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=356</guid>

					<description><![CDATA[このリリースは 10.2 からの修正リリース(2018/3/1リリース)です。 10.x からのアップデートではダンプ、リストアは不要です。 しかしながら、下記 1 番、2 番の項目を確認して、必要に応じて対応を行うこと ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 10.2 からの修正リリース(2018/3/1リリース)です。<br />
10.x からのアップデートではダンプ、リストアは不要です。<br />
しかしながら、下記 1 番、2 番の項目を確認して、必要に応じて対応を行うことを推奨します。<br />
また、10.2 よりも前のバージョンからアップデートする場合には、<a href="/tech-blog/pgsql/10-2/ ">10.2 のリリース情報</a>も参照してください。</p>
<p><span id="more-356"></span></p>
<h3 class="background">PostgreSQL 10.2 から 10.3 への変更点</h3>
<p>10.3、9.6.8、9.5.12、9.4.17、9.3.22 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>他ユーザからの search_path を使った「トロイの木馬」攻撃を防御する PostgreSQL とアプリケーションの設定方法がドキュメントに記載されました。 (Noah Misch) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
害意あるユーザから書き込み可能なスキーマを含む search_path 設定を使うことは、そのユーザが問い合わせの制御を取ること、そして、攻撃されたユーザの権限で任意の SQL コードを実行することをきわめて容易に可能にします。
</p>
<p>
そのため、search_path に信用できないスキーマを含めないようにすることが推奨されます。ドキュメントのスキーマ、libpq、拡張および CREATE FUNCTION の各ページについて記載を改定しました。
</p>
<p>
特に public スキーマはデフォルトで存在し、デフォルトで search_path に含まれており、全てのユーザでスキーマ上でオブジェクト作成が可能となっています。同じデータベースにアクセスする信用できない（本来制限されている）ユーザがいて、それでいて public スキーマと search_path 設定がデフォルト状態のままである場合には明らかに本脆弱性に該当します。(CVE-2018-1058)
</p>
<li>pg_dump や他のクライアントプログラムで安全でない search_path 設定の使用が回避されました。 (Noah Misch, Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
pg_dump、pg_upgrade、vacuumdb、およびその他各種の PostgreSQLで提供されるクライアントプログラム自体に前項で記載した類のハイジャックに対する脆弱性がありました。これらプログラムはたいてい管理者ユーザで実行されるので狙われやすいターゲットです。これらを安全にするため、動作時の search_path 設定に pg_catalog スキーマだけ含まれるようになりました。また、autovacuum worker も同様に動作するようになりました。なお、pgbench と psql は本修正の対象外です。
</p>
<p>
これは非互換箇所のある修正です。これらのプログラムから間接的に実行されるユーザ定義関数（例えばインデックス式の関数）が search_path 設定に依存して記述されている（例えば public スキーマ下の関数をスキーマ修飾無しに参照している）場合、エラーが生じるようになります。(CVE-2018-1058)
</p>
<li>ロジカルレプリケーションで伝播不可能なリレーションに対して伝播しようとするのを防ぐようになりました。 (Peter Eisentraut) (10)</li>
<p>
FOR ALL TABLES と指定されたパブリケーションが誤ってマテリアライズドビューや information_schema テーブルの変更を伝播していました。これらは変更ストリームから無視されるべきものです。
</p>
<li>サブプラン内の CTE 参照で同時更新再チェック動作の間違いが修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
CTE（WITH 句参照）が InitPlan や SubPlan で使われていて、問い合わせが同時更新された行に更新やロックをするために再チェックを必要とする場合に、誤った結果が返ることがありました。
</p>
<li>外部結合でマージ結合句が重複した場合にプランナが失敗する問題が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
コードの誤りにより稀なケースで「ERROR: left and right pathkeys do not match in mergejoin」や「ERROR: outer pathkeys do not match mergeclauses planner」といったエラーが生じていました。
</p>
<pre>
（10.2 でのエラーが発生する SQL を実行）
test=# EXPLAIN (COSTS off)
SELECT * FROM j1 FULL OUTER JOIN
(SELECT * FROM j2 ORDER BY j2.id DESC, j2.num asc) j2
ON j1.id = j2.id AND j1.id = j2.num;
ERROR: left and right pathkeys do not match in mergejoin

（10.3 での応答）
QUERY PLAN
------------------------------------------------------
Merge Full Join
Merge Cond: ((j2.id = j1.id) AND (j2.num = j1.id))
-&gt; Sort
Sort Key: j2.id DESC, j2.num
-&gt; Seq Scan on j2
-&gt; Sort
Sort Key: j1.id DESC
-&gt; Seq Scan on j1
(8 rows)
</pre>
<li>pg_upgrade でマテリアライズドビューのための relfrozenxid の保存に失敗する問題が修正されました。 (Tom Lane, Andres Freund) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
アップグレード後にマテリアライズドビューのデータが破損する可能性がありました。「ERROR: could not access status of transaction ...」や「ERROR: found xmin ... from before relfrozenxid ...」というエラーが現れます。
</p>
<p>
この問題は、めったに更新されない、もしくは REFRESH MATERIALIZED VIEW CONCURRENTLY のみで更新をしていたマテリアライズドビューで発生しやすいものと見られます。
</p>
<li>pg_dump の出力の誤りが修正されました。 (Alexey Bashtanov) (10)</li>
<p>
シーケンスの MAXVALUE や MINVALUE がデフォルト値であるなら、ダンプ出力で省略しますが、その判断が間違っていました。
</p>
<p>
大きな値を指定した場合に以下のような誤動作が報告されました。
</p>
<pre>
（誤動作例）
db=# CREATE SEQUENCE foo INCREMENT BY -1
MINVALUE -9223372036854775808 MAXVALUE 9223372036854775807;
db=# q
$ pg_dump db
: 中略
CREATE SEQUENCE foo
START WITH 9223372036854775807
INCREMENT BY -1
NO MINVALUE
NO MAXVALUE
CACHE 1;
: 後略
</pre>
<li>pg_dump の STATISTICS オブジェクトに対する扱いが修正されました。 (Tom Lane) (10)</li>
<p>
拡張統計のオブジェクトが正しいスキーマにリストアされなかったり所有者が正しくない状態になる可能性がありました。
</p>
<li>エラーコンテキストスタックで間違った PL/Python の関数名が報告されていた問題が修正されました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<p>
以下のように入れ子で PL/Python を呼び出している場合において該当します。
</p>
<pre>
(障害がおきる例)
db=# CREATE FUNCTION notice_innerfunc() RETURNS int AS $$
plpy.execute("DO LANGUAGE plpythonu $x$ plpy.notice('inside DO') $x$")
return 1
$$ LANGUAGE plpythonu;

db=# CREATE FUNCTION notice_outerfunc() RETURNS int AS $$
plpy.execute("SELECT notice_innerfunc()")
return 1
$$ LANGUAGE plpythonu;
</pre>
<p>
また、入れ子になった PL/Python の DO ブロックは一部のプラットフォームで NULL ポインタ参照によるクラッシュをひき起こす可能性がありました。
</p>
<li>contrib/auto_explain の log_min_duration の最大値が約 35 分から、およそ 24 日間までに引き伸ばされました。 (Tom Lane) (10)(9.6)(9.5)(9.4)(9.3)</li>
<li>拡張モジュールを Windows に容易に移植できるようにするために、関連する GUC 変数が PGDLLIMPORT としてマークされました。 (Metin Doslu) (10)(9.6)</li>
</ol>

<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 10.2 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/10-2/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Thu, 15 Feb 2018 01:00:22 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 10]]></category>
		<category><![CDATA[PostgreSQL 10.1]]></category>
		<category><![CDATA[PostgreSQL 10.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=361</guid>

					<description><![CDATA[このリリースは 10.1 からの修正リリース(2018/2/8リリース)です。 10.x からのアップデートではダンプ、リストアは不要です。 また、10.1 より前のバージョンからアップデートを行う場合は 10.1 に関 ...]]></description>
										<content:encoded><![CDATA[<p>このリリースは 10.1 からの修正リリース(2018/2/8リリース)です。<br />
10.x からのアップデートではダンプ、リストアは不要です。</p>
<p>また、10.1 より前のバージョンからアップデートを行う場合は 10.1 に関する技術情報を参照してください。</p>
<p><span id="more-361"></span></p>
<h3 class="background">PostgreSQL 10.1 から 10.2 への変更点</h3>
<p>10.2、9.6.7、9.5.11、9.4.16、9.3.21 の各バージョンが同時にリリースされており、本ページでは共通の記載としています。各修正項目が適用されるバージョン系列番号を項目末尾に括弧書きで記載しています。</p>
<hr />
<ol>
<li>複数の式を含むパーティションキーの処理が修正されました。  (&Aacute;lvaro Herrera, David Rowley) (10)</li>
<p>
本障害はクラッシュをひき起こす他、攻撃を意図した作りこまれた入力によってサーバプロセス上の任意のメモリが露出してしまう可能性がありました。
</p>
<p>
PARTITION BY 構文を使ったテーブルパーティショニングで「PARTITION BY RANGE ((col1 / 1000), substr(col2, 1, 5))」など、複数の式でパーティションキーを指定した場合に問題が生じます。 (CVE-2018-1052)
</p>
<pre>
（クラッシュ発生例 - CREATE TABLE でクラッシュします）
db1=# CREATE TABLE ptest (col1 int, col2 text, col3 text)
        PARTITION BY RANGE ((col1 / 1000), substr(col2, 1, 5));
db1=# CREATE TABLE ptest_1 PARTITION OF ptest
        FOR VALUES FROM (0,'00000') TO (1, '10000');
db1=# CREATE TABLE ptest_2 PARTITION OF ptest
        FOR VALUES FROM (0,'10000') TO (1, '20000');
server closed the connection unexpectedly
</pre>
<li>pg_upgrade で作られる全ての一時ファイルが誰でも見れるパーミッションにならないように修正されました。  (Tom Lane, Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
pg_upgrade は通常は一時ファイルを実行ユーザのみ読み書きできるように制限します。しかしながら、実行したユーザの umask 設定で許可されていると、「pg_dumpall -g」の出力を含む一時ファイルがグループ参照可能、または、全ユーザ参照可能、更には書き込み可能になることがありました。
</p>
<p>
複数ユーザで使用するマシンにおいて、umask 設定や実行するディレクトリのパーミッションによっては、データベースのパスワードが露出することになります。(CVE-2018-1053)
</p>
<li>KEY SHARE 行ロック中に更新されたタプルの VACUUM 処理が修正されました。  (Andres Freund, &Aacute;lvaro Herrera) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
一部のケースで VACUUM はこのようなデッドタプルの除去に失敗していました。これによりデータ破損を起こすことがあります。
</p>
<li>新たなオーバーフローページを追加した後にハッシュインデックスのメタページを壊してしまう障害が修正されました。  (Lixian Zou, Amit Kapila) (10)</li>
<p>
インデックス破損をもたらす可能性があります。
</p>
<li>VACUUM が常に GIN インデックスのペンディングリストをクリーンアップするようになりました。  (Masahiko Sawada) (10) (9.6)</li>
<p>
これには削除済みのインデックスエントリが確実に除去されることが必要です。従来コードでは他プロセスが同時にクリーンアップを実行しているとき VACUUM がクリーンアップをスキップするのを許していて、その結果、無効なエントリがインデックスに置き去りにされてしまう危険がありました。
</p>
<li>一部の LSN 取得で不十分なバッファロックが修正されました。  (Jacob Champion, Asim Praveen, Ashwin Agrawal) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
この誤りにより同時データ読み込みにおいて誤動作のおそれがありました。どのような結果が生じるか完全には分かっていません。
</p>
<li>結果が GROUPING SETS で使われるサブクエリの平坦化を伴う場合に生じる誤った問い合わせ結果が修正されました。  (Heikki Linnakangas) (10) (9.6) (9.5)</li>
<li>リストパーティショニング制約の boolean または配列型によるパーティションキーに対する扱いが修正されました。  (Amit Langote) (10)</li>
<p>
必ず col = ANY(ARRAY[val1, val2, ...]) という式で制約が書かれていたものが、col = val1 OR col = val2 という形でも生成されるようになります。
</p>
<li>ALTER TABLE .. NO INHERIT での子テーブル削除が同時実行されたとき、継承テーブルの問い合わせで、不要なエラーを回避するようになりました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
以下のエラーが発生していました。
</p>
<pre>
ERROR:  could not find inherited attribute "col1" of relation "tbl1"
</pre>
<li>CREATE INDEX CONCURRENTLY を複数同時実行したときに本来必要のない偽性のデッドロックエラーが生じていたのが修正されました。  (Jeff Janes) (10) (9.6) (9.5) (9.4)</li>
<li>VACUUM FULL において、pg_class のテーブルサイズ属性をより早くに更新するようになりました。  (Amit Kapila) (10)</li>
<p>
テーブルのハッシュインデックスを再構築するとき、初期ハッシュサイズを定めるのに pg_class 統計情報が使われます。本修正で古い情報が使われるのを防ぐことができます。
</p>
<li>列がない場合における UNION/INTERSECT/EXCEPT が修正されました。  (Tom Lane) (10)</li>
<p>
例えば以下は同じ行内容（列なし行）なので結果は「1 row」であるべきです。
</p>
<pre>
（修正前バージョンの動作例）
db1=# SELECT FROM generate_series(1,5) UNION SELECT FROM generate_series(1,3);
--
(8 rows)
</pre>
<li>TYPE を指定するテーブルやパーティションで IDENTITY 列が使えなくなりました。  (Michael Paquier) (10)</li>
<p>
使用したときクラッシュが生じていました。このような使い方は今のところサポートされない仕様とします。
</p>
<pre>
（クラッシュ発生例）
db1=# CREATE TYPE type13 AS (f1 integer, f2 text, f3 bigint);
db1=# CREATE TABLE tbl13 OF type13 (f1 WITH OPTIONS GENERATED ALWAYS AS IDENTITY);
The connection to the server was lost. Attempting reset: Failed.
</pre>
<li>IDENTITY 列に挿入するときに正しいデフォルト値を適用するように様々な誤りが修正されました。  (Michael Paquier, Peter Eisentraut) (10)</li>
<p>
いくつかの場合、特に COPY、ALTER TABLE .. ADD COLUMN において、期待されたデフォルト値が適用されず、NULL 値が挿入されていました。
</p>
<li>継承テーブルに外部子テーブルが含まれている場合のエラーが修正されました。  (Etsuro Fujita) (10) (9.6) (9.5)</li>
<p>
通常テーブルと外部テーブルが継承テーブルのツリーに混在していると、UPDATE、DELETE の問い合わせで不正なプランが作られました。一部のケース、特に行レベルトリガが外部子テーブルにある場合に、目に見えるエラーとしてあらわれます。
</p>
<p>
UPDATE 文で以下のエラーが出るケースが報告されました。
</p>
<pre>
ERROR:  could not open file "base/12345/34567": No such file or directory
</pre>
<li>LATERAL 中の VALUES の中の相関サブクエリで生じていたエラーが修正されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<pre>
（サブクエリ無しで実行できる例とエラー例）
db2=# SELECT * FROM generate_series(1, 2) g,
        LATERAL (VALUES (g*3), (g*5)) AS v(x);
 g | x
---+----
 1 |  3
 1 |  5
 2 |  6
 2 | 10
(4 rows)

db2=# SELECT * FROM generate_series(1, 2) g,
        LATERAL (VALUES ((SELECT g*3)), ((SELECT g*5))) AS v(x);
ERROR:  SubPlan found with no parent plan
</pre>
<li>LATERAL サブクエリ内の入れ子になった UNION ALL を伴う場合にプランナが「ERROR:  could not devise a query plan for the given query」でエラーになるのが修正されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>関数依存性の統計が boolean 列にも使えるようになりました。  (Tom Lane) (10)</li>
<p>
これまでは拡張統計の定義ができて情報収集も行われるにもかかわらず、プランナがこれらを適用しませんでした。
</p>
<li>グルーピング列において複数行を返す関数を含むサブクエリにより出力されたグループの数を過小評価しないようになりました。  (Tom Lane) (10)</li>
<p>
PostgreSQL 10.0、10.1 では「SELECT DISTINCT unnest(foo)」のようなケースで旧リリース系列よりもより少ない行数見積が得られており、最適でないプランが選択される可能性がありました。
</p>
<li>ロジカルレプリケーションワーカでのトリガ利用が修正されました。  (Petr Jelinek) (10)</li>
<li>ロジカルデコーディングがクラッシュしたトランザクションのファイルを正しくクリーンアップするように修正されました。  (Atsushi Torikoshi) (10) (9.6) (9.5) (9.4)</li>
<p>
ロジカルデコーディングは多数の WAL レコードを生成するトランザクションのために、溢れた WAL レコードをディスクに書き出すことがあります。通常これらのファイルはトランザクションのコミットまたはアボートのレコードに達した後にクリーンアップされます。しかし、そのようなレコードがずっと見つからない場合、削除を行うコードは不適切な動作をしていました。
</p>
<li>大きいトランザクションの処理中に wal sender がタイムアウトせず、割り込みに応答しない動作が修正されました。  (Petr Jelinek) (10) (9.6) (9.5) (9.4)</li>
<li>レプリケーション起点を削除する間の競合状態が修正されました。  (Tom Lane) (10)</li>
<p>
削除処理が無期限に待たされる可能性がありました。
</p>
<li>pg_read_all_stats ロールのメンバーは wal sender の統計を pg_stat_replication ビューで見れるようになりました。  (Feike Steenbergen) (10)</li>
<p>
pg_read_all_stats ロールはあらかじめ用意されているロールの一つです。
</p>
<li>ベースバックアップ送出中の wal sender が pg_stat_activity ビューで active として見えるようになりました。  (Magnus Hagander) (10)</li>
<p>
これまで idle と表示されていました。
</p>
<li>pg_hba_file_rules ビューでの scram-sha-256 認証メソッドの報告が修正されました。  (Michael Paquier) (10)</li>
<p>
これまでは「scram-sha256」と表示されていて、ユーザに混乱をもたらす恐れがあるので綴りが修正されました。
</p>
<li>他の権限検査関数と同様に WITH GRANT OPTION に対応するように has_sequence_privilege() 関数が修正されました。  (Joe Conway) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>UTF8 エンコーディングを使うデータベースで、異なるエンコーディングを主張するあらゆる XML 宣言を無視するようになりました。  (Pavel Stehule, Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
XML 文字列は常にデータベースのエンコーディングで格納されます。そのため、libxml に他のエンコーディング宣言で動作できるようにすることは誤った結果をもたらしました。UTF8 以外のエンコーディングでは何にせよ非 ASCII の XML データのサポートは保証されませんので、バグ互換性のために以前の振る舞いを維持します。
</p>
<p>
この変更は xpath() と関連する関数のみに影響があります。他の XML 処理コードは既にこのように振舞います。
</p>
<li>将来のマイナープロトコルバージョンに対する前方互換性が提供されました。  (Robert Haas, Badrul Chowdhury) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
本変更でクライアントがバージョン 3.x を要求できるようになりました。これにより将来のプロトコルのマイナーバージョンアップを迅速に適用できるようになるはずです。
</p>
<p>
これまで、プロトコルバージョン番号のメジャー部とマイナー部の間で機能的な違いがなく、PostgreSQL サーバは 3.0 より新しいバージョンの使用を単に拒絶していました。
</p>
<li>SCRAM チャンネルバインドに対応したクライアント（バージョン 11 以降の libpq など）がバージョン 10 サーバに接続できるようになりました。  (Michael Paquier) (10)</li>
<p>
バージョン 10 にはこの機能はありません。加えて、接続時のこれを使うかどうかのネゴシエーションが誤って行われていました。
</p>
<li>内部実装関数 ConditionVariableBroadcast() が書き換えられました。  (Tom Lane, Thomas Munro) (10)</li>
<p>
繰り返し不運なタイミングが生じるとプロセスが無限ループに陥る恐れがありました。バージョン 10 では条件変数の使用が限定されているため、これはパラレルインデックススキャンと一部のレプリケーションスロット上の操作にだけ影響があります。
</p>
<li>サブトランザクション（SAVEPOINT 等）がアボートするときに、条件変数の待機を正しくクリーンアップするようになりました。  (Robert Haas) (10)</li>
<li>条件変数を待機している子プロセスは postmaster プロセスが終了したなら確実に直ちに終了するようになりました。  (Tom Lane) (10)</li>
<li>二つ以上の Gather ノードを使う並列問い合わせでのクラッシュが修正されました。  (Thomas Munro) (10)</li>
<li>並列インデックススキャンでの削除された、あるいは half-dead のインデックスページを処理しているときのハングアップが修正されました。  (Amit Kapila) (10)</li>
<li>並列ビットマップスキャンで共有メモリセグメントを割り当てできなかったときのクラッシュが回避されました。  (Robert Haas) (10)</li>
<li>パラレルワーカプロセスの開始失敗をうまく処理できるようになりました。  (Amit Kapila, Robert Haas) (10) (9.6) (9.5) (9.4)</li>
<p>
これまで並列問い合わせは、fork() の失敗や他の低確率な問題でワーカが開始できないときにハングアップしがちでした。
</p>
<li>並列問い合わせを開始する際にパラレルワーカを一つも取得できなかった場合の不要な失敗を回避するようになりました。  (Robert Haas) (10)</li>
<li>パラレルワーカからの EXPLAIN 統計の収集が修正されました。  (Amit Kapila, Thomas Munro) (10) (9.6)</li>
<li>パラレルワーカに渡される問い合わせ文字列が確実に正しく NULL 終端するようになりました。  (Thomas Munro) (10)</li>
<p>
パラレルワーカからの postmaster ログ出力でゴミが吐き出されるのを防止します。
</p>
<li>__int128 を使う場合に安全でないアライメントの想定を回避するようになりました。  (Tom Lane) (10) (9.6) (9.5)</li>
<p>
これまでに知られている症状は一部の並列集約問い合わせでクラッシュすることです。
</p>
<li>非常に深く入れ子になった集合操作 (UNION/INTERSECT/EXCEPT) のプラン作成での、スタックオーバーフローによるクラッシュが防止されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>マージ結合内側のインデックススキャンにおける EvalPlanQual リチェック処理中のクラッシュを回避しました。  (Tom Lane) (10)</li>
<p>
これは同時に選択された行の更新が行われているときに、結合を伴う UPDATE または SELECT FOR UPDATE を行った場合にのみ発生します。
</p>
<li>テーブルに計算不能な拡張統計が定義されているときの、autovacuum のクラッシュが修正されました。  (&Aacute;lvaro Herrera) (10)</li>
<li>pg_hba.conf にある種の LDAP URL が現れた場合の NULL ポインタによるクラッシュが修正されました。  (Thomas Munro) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
LDAP URL としてホスト名の無い「ldap://」やベース DN の無い「ldap://localhost」などがあると、pg_hba.conf を読み込む際にクラッシュが発生します。バインド DN が無い設定の場合は NULL ポインタをエラーメッセージで出力しようとして、一部のプラットフォームではクラッシュするかもしれません。
</p>
<li>単純ハッシュテーブルの過度な成長によるモリ不足エラーが防止されました。  (Tomas Vondra, Andres Freund) (10)</li>
<p>
以下のような単純な SELECT 文で応答が無くなったり、メモリ不足エラーになる動作が報告されていました。
</p>
<pre>
SELECT DISTINCT bigint_val FROM tbl46 ;
</pre>
<li>PL/pgSQL ドキュメントにおける INSTR() 関数のサンプルコードが修正されました。  (Yugo Nagata, Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
Oracle のものと同じ動作をする instr 関数と記載されていますが、第 3 引数が負の値であった場合、第 4 引数がゼロまたは負の値であった場合の動作が Oracle の instr 関数と異なっていて、修正されました。
</p>
<li>ACL（アクセス制御）、コメント、およびセキュリティラベルのエントリをアーカイブ出力フォーマットで確実に識別できるように pg_dump が修正されました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
アーカイブするエントリに付与するタグが修正されました。修正前の動作は、LARGE OBJECT で始まるタグを見てラージオブジェクト関連のエントリと認識しようとします。このため、スキーマ（オブジェクト定義）ではなくデータとして間違って分類されて、スキーマのみ、あるいは、データのみのダンプの際に望ましくない結果になる可能性があります。
</p>
<p>
この変更は pg_restore --list の出力で目に見える結果としてあらわれます。
</p>
<li>pg_rewind の実装関数 copy_file_range の名前が、新たな Linux システムコール名との競合を回避するため変更されました。  (Andres Freund) (10) (9.6) (9.5)</li>
<li>ecpg で、正しい長さを持たない指示子の配列を見つけてエラーを出すようになりました。  (David Rader) (10) (9.6) (9.5) (9.4) (9.3) </li>
<li>contrib/cube の cube ~&gt; int 演算子の振る舞いが KNN 検索と互換性を持つように変更されました。  (Alexander Korotkov) (10) (9.6)</li>
<p>
第二引数（次元指定）の意味が、様々な次元数であっても、どの値が選ばれるか予想可能になるように変更されました。
</p>
<p>
これは非互換の変更です。これを使った式インデックスは再作成が必要ですし、マテリアライズドビューはリフレッシュが必要です。
</p>
<li>contrib/hstore で、ソースと宛先を同一にして memcpy() を使ったことによる libc のアサート発生が回避されました。  (Tomas Vondra) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>contrib/pageinspect でタプルの NULL ビットマップの誤った表示が修正されました。  (Maksim Milyutin) (10) (9.6)</li>
<li>contrib/pageinspect の hash_page_items() 関数の誤った出力が修正されました。  (Masahiko Sawada) (10)</li>
<li>contrib/postgres_fdw でリモート結合を伴うプラン作成時に「ERROR:  outer pathkeys do not match mergeclauses」というプランナエラーが出るのが回避されました。  (Robert Haas) (10) (9.6)</li>
<li>contrib/postgres_fdw で、GROUP BY が重複している場合のプランナのエラーが回避されました。  (Jeevan Chalke) (10)</li>
<p>
GROUP BY の重複とは以下のようなケースです。選択リストの1番目も2番目もc1列で同一列ですが、どちらも GROUP BY 対象です。
</p>
<pre>
SELECT c1, c1 FROM ft56 WHERE c1 &gt; 5 GROUP BY 1, 2;
</pre>
<p>
以下のエラーが報告されました。
</p>
<pre>
ERROR:  targetlist item has multiple sortgroupref labels
</pre>
<li>macOS むけの PostgreSQL 自動起動のやり方について、現代的なサンプルが提供されるようになりました。  (Tom Lane) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
contrib/start-scripts/osx は廃れた基盤を使っていて近年の macOS リリースでは動作しません。新たに contrib/start-scripts/macos にて新たな起動基盤を使ったスクリプトが提供されます。
</p>
<li>Windows でビルド時に設定で指定する OpenSSL ライブラリの誤選択が修正されました。  (Andrew Dunstan) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>libperl の MinGW ビルドバージョンのリンクに対応しました。  (Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
これはいくつかの一般的な Windows むけ Perl 配布物で PL/Perl をビルド可能にします。
</p>
<li>MSVC ビルドが 32bit libperl が -D_USE_32BIT_TIME_T を必要とするかを検査するように修正されました。  (Noah Misch) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>Windows で postmaster 起動時にクラッシュダンプハンドラをより早期にインストールするようになりました。  (Takayuki Tsunakawa) (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
これにより起動時初期の従来ダンプが生成されなかった障害で、コアダンプ取得が可能になるでしょう。
</p>
<li>Windows で postmaster 起動時の早い時点でメッセージを出力するときの、文字エンコーディング変換関連のクラッシュが回避されました。  (Takayuki Tsunakawa) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>既存の NetBSD の Motorola 68K のスピンロックのコードを OpenBSD むけにも使用するようになりました。  (David Carlier) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>Motorola 88K のスピンロックに対応しました。  (David Carlier) (10) (9.6) (9.5) (9.4) (9.3)</li>
<li>タイムゾーンデータファイルが tzdata release 2018c に更新されました。   (10) (9.6) (9.5) (9.4) (9.3)</li>
<p>
ブラジル、サントメ・プリンシペの夏時間法の変更、ボリビア、日本、南スーダンの歴史的な修正が含まれます。US/Pacific-New ゾーンは削除されました（これは America/Los_Angeles の別名にすぎません）。</p>
</ol>

<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PostgreSQL 10 に関する技術情報</title>
		<link>https://www.sraoss.co.jp/tech-blog/pgsql/10-0/</link>
		
		<dc:creator><![CDATA[PostgreSQL技術グループ]]></dc:creator>
		<pubDate>Mon, 30 Oct 2017 01:00:47 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[PostgreSQL 10]]></category>
		<category><![CDATA[PostgreSQL 10.1]]></category>
		<category><![CDATA[PostgreSQL 10.2]]></category>
		<category><![CDATA[アップデート]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=365</guid>

					<description><![CDATA[このページでは PostgreSQL 10（2017/10/5リリース） に関する技術情報をお届けします。 本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。 最終更新：2021/ ...]]></description>
										<content:encoded><![CDATA[<p>このページでは PostgreSQL 10（2017/10/5リリース） に関する技術情報をお届けします。<br />
本ドキュメントは PostgreSQL のリリースノートを元に弊社で解説を加えたものです。</p>
<p>最終更新：2021/10/26<br />
<h3>バージョン10の主な拡張点</h3>
<p>バージョン10での主な拡張箇所は以下の通りです。</p>
<ul>
<li>パブリッシュ/サブスクライブによる論理レプリケーション</li>
<li>宣言的テーブルパーティショニング</li>
<li>改善された並列問い合わせ</li>
<li>著しい全般の性能改善</li>
<li>SCRAM-SHA-256に基づくより強いパスワード認証</li>
<li>改善された監視と制御</li>
</ul>
<h3>バージョン10への移行/互換性のない変更点</h3>
<ul>
<li>
pg_upgrade で PostgreSQL をメジャーバージョンアップした場合は Hash インデックスを<br />
再構築する必要があります。(Mithun Cy, Robert Haas, Amit Kapila) (10)
</li>
<p>Hashインデックスの改良のために必要な措置です。<br />
pg_upgrade コマンドはこの作業を補助するスクリプトを自動生成します。</p>
<li>
WAL格納ディレクトリが pg_xlog から pg_wal にリネームされました。<br />
また、トランザクション状態格納ディレクトリも pg_clog から pg_xact にリネームされました。(Michael Paquier) (10)
</li>
<p>PostgreSQL利用者はしばしばこれらディレクトリ内のファイルを不要ファイルと考えて手動削除しようとする場合がありました。<br />
これは、復元不可能なデータ損失を招きます。<br />
このディレクトリ名称変更によって、そのような失敗の回避を試みます。</p>
<li>
xlog に関連する SQL関数、ツール、オプションの名称が wal に変更されました。 (Robert Haas) (10)
</li>
<p>たとえば、pg_switch_xlog() は pg_switch_wal() に、pg_receivexlog は pg_receivewal になり、--xlogdir オプションは --waldir オプションに変わります。<br />
これは、pg_xlog ディレクトリ名が変更されることを受けての変更です。xlog というワードはユーザが利用する場面では使われなくなりました。</p>
<li>
WAL に関する関数とビュー名で使われていた location というワードが lsn に変更されました。 (David Rowley) (10)
</li>
<p>これまで 2つの用語が混在していました。</p>
<li>
問い合わせの SELECTリスト内に現れる集合を返す関数の実装が変更されました。 (Andres Freund) (10)
</li>
<p>集合を返す関数は、LATERALのFROM句の項目に置かれたかのように、SELECTリスト内のスカラ式を評価する前に評価されるようになりました。<br />
これにより、複数の集合を返す関数が存在する場合に、より穏当なセマンティクスが可能になります。<br />
関数が行数の異なる結果を返す場合、行数が少ないほうの結果は、NULL を追加することによって最も行数の多い結果に一致するように拡張されます。<br />
これまでは、すべての関数が同時に終了するまで結果を繰り返し、関数の周期の最小公倍数に等しい行数を生成していました。<br />
さらに、CASE およびCOALESCE 内で集合を返す関数が使用できなくなりました。</p>
<pre>
(9.6 以前の動作例)
=# SELECT generate_series(1, 2), generate_series(1, 3);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
               1 |               3
               2 |               1
               1 |               2
               2 |               3
(6 rows)

(10 の動作例)
=# SELECT generate_series(1, 2), generate_series(1, 3);
 generate_series | generate_series
-----------------+-----------------
               1 |               1
               2 |               2
                 |               3
(3 rows)
</pre>
<li>
ALTER TABLE ... ADD PRIMARY KEY で列に NOT NULL を指定したとき、その変更が継承の子テーブルにも伝搬されるようになりました。 (Michael Paquier) (10)
</li>
<pre>
=# CREATE TABLE p (c int);
CREATE TABLE
=# CREATE TABLE t () INHERITS (p);
CREATE TABLE
=# ALTER TABLE p ADD PRIMARY KEY (c);
ALTER TABLE

(9.6 以前の動作例)
=# \d t
       Table "public.t"
 Column |  Type   | Modifiers
--------+---------+-----------
 c      | integer |
Inherits: p

(10 の動作例)
=# \d t
                 Table "public.t"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 c      | integer |           | not null |
Inherits: p
</pre>
<li>
文単位トリガが文ごとに複数回起動されないようになりました。 (Tom Lane) (10)
</li>
<p>外側の文、あるいは他の書き込み可能CTEにより更新された同テーブルを更新する書き込み可能CTEを伴う場合、BEFORE STATEMENT または AFTER STATEMENT トリガが 2 回以上起動されます。<br />
また、外部キー強制動作 (ON DELETE CASCADE など) の影響を受けるテーブルに文単位トリガがあった場合、トリガが外部 SQL 文ごとに起動される可能性があります。<br />
これは SQL 標準に反するため、変更されました。</p>
<li>
シーケンスのメタデータフィールドが新しい pg_sequence システムカタログに移動されました。(Peter Eisentraut) (10)
</li>
<p>シーケンスのリレーションでは、lastvalue、log_cnt、および is_calledという nextval() によって編集可能なフィールドのみが格納されるようになりました。<br />
開始値や増加量などのほかのシーケンスプロパティは、pg_sequence カタログの対応する行に保持されます。<br />
ALTER SEQUENCE の更新は完全にトランザクション処理され、コミットするまでシーケンスがロックされます。<br />
nextval() と setval() 関数はトランザクション扱いされないままです。</p>
<p>この変更によってもたらされた主な非互換性は、シーケンスのリレーションから選択すると、上記の 3 つのフィールドのみが返されるようになったことです。<br />
シーケンスのほかのプロパティを取得するには、アプリケーションが pg_sequence を調べなければなりません。新しいシステムビューpg_sequences もこの目的のために使用でき、既存のコードとより互換性のある列名が提供されます。</p>
<p>シーケンスの psql の \d コマンドの出力も再設計されています。</p>
<pre>
(9.6 以前の動作例)
=# CREATE SEQUENCE s;
CREATE SEQUENCE
=# SELECT * FROM s;
 sequence_name | last_value | start_value | increment_by |      max_value      | min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+-------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
 s             |          1 |           1 |            1 | 9223372036854775807 |         1 |           1 |       0 | f         | f
(1 row)

(10 の動作例)
=# CREATE SEQUENCE s;
CREATE SEQUENCE
=# SELECT * FROM s;
 last_value | log_cnt | is_called
------------+---------+-----------
          1 |       0 | f
(1 row)

=# SELECT * FROM pg_sequence WHERE seqrelid = 's'::regclass;
 seqrelid | seqtypid | seqstart | seqincrement |       seqmax        | seqmin | seqcache | seqcycle
----------+----------+----------+--------------+---------------------+--------+----------+----------
    16405 |       20 |        1 |            1 | 9223372036854775807 |      1 |        1 | f
(1 row)

=# SELECT * FROM pg_sequences WHERE sequencename = 's';
 schemaname | sequencename | sequenceowner | data_type | start_value | min_value |      max_value      | increment_by | cycle | cache_size | last_value
------------+--------------+---------------+-----------+-------------+-----------+---------------------+--------------+-------+------------+------------
 public     | s            | postgres      | bigint    |           1 |         1 | 9223372036854775807 |            1 | f     |          1 |
(1 row)
</pre>
<li>
pg_basebackup がデフォルトでバックアップをリストアするために必要な WAL をストリームするようになりました。(Magnus Hagander) (10)
</li>
<p>これにより、pg_basebackup の -X/--xlog-method のデフォルトが stream に変更されました。以前の動作を再現するために、オプション値 none が追加されました。pg_basebackup のオプション -x が削除されました (代わりに、-X<br />
fetch を使用します)。</p>
<li>
pg_hba.conf の論理レプリケーション設定行の書式が変わりました。 (Peter Eisentraut) (10)
</li>
<p>これまで、論理レプリケーション接続は pg_hba.conf の database カラムに replicationキーワードを指定していました。<br />
今回のリリースで replication キーワードは物理レプリケーションのみで指定され、論理レプリケーションはデータベース名や all等のキーワードを指定できるようになりました。<br />
この変更はサードパーティー製の論理レプリケーションプラグインを使っているユーザにのみ影響します。</p>
<li>
pg_ctl コマンドがデフォルトで起動または停止処理が完了するまで待つようになりました。(Peter Eisentraut) (10)
</li>
<p>以前はいくつかの pg_ctl の動作は完了を待たず、-w を使用する必要がありました。</p>
<li>
サーバパラメータの log_directory のデフォルト値が pg_log から log に変更されました。 (Andreas Karlsson) (10)
</li>
<li>
カスタム OpenSSL DH パラメータのファイル名を指定する設定オプション ssl_dh_params_file が追加されました。(Heikki Linnakangas) (10)
</li>
<p>これは、ハードコードされた、文書化されていないファイル名 dh1024.pem を置き換えます。dh1024.pem はデフォルトでは検査されません。<br />
カスタムDHパラメータを使用する場合は、このオプションを設定する必要があります。</p>
<li>
OpenSSLの短期DH暗号(ephemeral DH ciphers) に使用されるデフォルトのDHパラメータのサイズが 2048ビットに増やされました。(Heikki Linnakangas) (10)
</li>
<p>コンパイルされた DH パラメータのサイズが 1024 から 2048 ビットに増やされ、DH鍵共有がブルートフォース攻撃に対してより強くなりました。しかし、いくつかの古い SSL実装、とくに Java Runtime Environment バージョン 6 のいくつかのリビジョンでは、1024ビットより長い DHパラメータを受けつけないため、<br />
SSL経由で接続することができません。このような古いクライアントをサポートする必要がある場合は、コンパイルされたデフォルトの代わりにカスタムの 1024ビットDHパラメータを使用してください。</p>
<li>
暗号化されていないパスワードをサーバに格納する機能が削除されました。 (Heikki Linnakangas) (10)
</li>
<p>password_encryption サーバパラメータは、off または plain をサポートしなくなりました。CREATE / ALTER USER ... PASSWORD では、UNENCRYPTED オプションがサポートされなくなりました。同様に、createuser から --unencrypted オプションが削除されました。<br />
以前のバージョンから移行された暗号化されていないパスワードは、このリリースでは暗号化されて格納されます。<br />
password_encryption のデフォルト設定はまだ md5 です。</p>
<li>
パラレルクエリを制御するために、min_parallel_table_scan_size および min_parallel_index_scan_size サーバパラメータが追加されました。(Amit Kapila, Robert Haas) (10)
</li>
<p>これらは min_parallel_relation_size を置き換えます。これは、あまりにも一般的であることが判明したためです。</p>
<li>
shared_preload_libraries および関連するサーバパラメータ内の引用符で囲まれていないテキストを小文字に変換しないようになりました。(QL Zhuo) (10)
</li>
<p>これらの設定は実際にはファイル名のリストですが、以前は異なる構文解析ルールをもつSQL識別子のリストとして扱われていました。</p>
<li>
sql_inheritance サーバーパラメータが削除されました。 (Robert Haas) (10)
</li>
<p>この設定をデフォルト値から変更すると、親テーブルを参照する問い合わせで子テーブルが含まれなくなりました。ただし、SQL 標準ではそれらを含む必要があります。これは PostgreSQL 7.1 以降のデフォルトです。</p>
<li>
多次元配列を PL/Python 関数に渡し、ネストされた Python リストとして返すことが可能になりました。 (Alexey Grishchenko, Dave Cramer, Heikki Linnakangas) (10)
</li>
<p>この機能では、PL/Python で複合型の配列の処理に後方互換性のない変更が必要となります。以前は、[[col1, col2], [col1, col2]] などの書式で複合値の配列を返すことができました。<br />
これは 2 次元配列として解釈されます。<br />
あいまいさを解決するために、配列の複合型をリストではなく Python タプルとして記述する必要があります。<br />
つまり、代わりに [(col1, col2), (col1, col2)] と記述します。</p>
<li>
PL/Tcl のモジュール自動ロード機能が削除されました。 (Tom Lane) (10)
</li>
<p>この機能は、新しいサーバパラメータ pltcl_start_proc と pltclu_start_proc に置き換えられます。これは、使いやすく、ほかの PL で利用できる機能と同じにするためです。</p>
<li>
pg_dump/pg_dumpall で 8.0 より前のサーバからのダンプがサポートされなくなりました。 (Tom Lane) (10)
</li>
<p>8.0 より前のサーバからダンプする必要があるユーザは、PostgreSQL 9.6 以前のダンププログラムを使用する必要があります。<br />
結果の出力は引き続き新しいサーバで正常に読み込めます。</p>
<li>
時刻データの浮動小数点数サポートが廃止されました。 (Tom Lane) (10)
</li>
<p>これによってコンパイルオプションの --disable-integer-datetimes が取り除かれました。浮動小数点 timestamp は殆ど利点がなく、PostgreSQL 8.3 以来デフォルトで無効でした。</p>
<li>
PostgreSQL 6.3 からクライアント側でサポートされていない<br />
フロントエンド/バックエンドプロトコルの version 1.0 が取り除かれました。 (Tom Lane) (10)
</li>
<li>
contrib/tsearch2 モジュールが取り除かれました。 (Peter Eisentraut) (10)
</li>
<p>このモジュールは、PostgreSQL 8.3 以前のリリースで用意された全文検索との互換性を提供していました。</p>
<li>
createlang および droplang コマンドが取り除かれました。 (Peter Eisentraut) (10)
</li>
<p>これらは PostgreSQL 9.1 から非推奨となっていました。<br />
これらのコマンドの代わりに CREATE EXTENSION および DROP EXTENSION 文を使ってください。</p>
<li>
Version-0 呼び出し規約のサポートを終了しました。(Andres Freund) (10)
</li>
<p>C 言語関数を提供する拡張機能は Version-1 呼び出し規約に準拠しなければならなくなりました。Version-0 は 2001 年から非推奨となっています。</p>
</ul>
<h3>変更点</h3>
<h4>サーバ</h4>
<h5>並列問い合わせ</h5>
<ul>
<li>
並列のB-treeインデックススキャンに対応しました。(Rahila Syed, Amit Kapila, Robert Haas, Rafia Sabih) (10)
</li>
<p>この変更でB-treeインデックスページを各パラレルワーカから検索できるようになりました。</p>
<li>
並列のビットマップヒープスキャンに対応しました。(Dilip Kumar) (10)
</li>
<p>これにより一つのインデックススキャンを各パラレルワーカにヒープの異なる部分を担当するように割り当てできるようになりました。</p>
<li>マージ結合を並列に実行できるようになりました。(Dilip Kumar) (10)</li>
<li>関連しないいくつかの副問い合わせを並列に実行できるようになりました。 (Amit Kapila) (10)</li>
<li>パラレルワーカがあらかじめソートされたデータを返せるようになりました。 (Rushabh Lathia) (10)</li>
<li>手続き言語関数において並列問い合わせが使われる箇所が増えました。(Robert Haas, Rafia Sabih) (10)</li>
<li>
並列問い合わせに使うことができるワーカプロセス数を制限するmax_parallel_workersサーバパラメータが追加されました。 (Julien Rouhaud) (10)
</li>
<p>並列問い合わせ以外にワーカプロセスを確保するために、このパラメータをmax_worker_processesよりも小さく設定する使い方ができます。
</ul>
<h5>インデックス</h5>
<ul>
<li>
WALにハッシュインデックス対応が加わりました。(Amit Kapila) (10)
</li>
<p>これはハッシュインデックスをクラッシュセーフかつレプリケーション可能にします。<br />
これまでのこれらの使用に関する（クラッシュセーフではなく、レプリケーションできない、という）警告は取り除かれました。</p>
<li>ハッシュインデックスの性能を改善しました。 (Amit Kapila, Mithun Cy, Ashutosh Sharma) (10)</li>
<li>INET、CIDRデータ型に対して SP-GiSTインデックス対応が追加されました。(Emre Hasegeli) (10)</li>
<li>
BRINインデックスの要約をより積極的に行うオプションが追加されました。 ( lvaro Herrera(10)
</li>
<p>新たな CREATE INDEX のオプションは新たなページ範囲が作られたときに以前の BRINページ範囲の自動要約を可能にします。</p>
<li>
インデックス範囲のBRIN要約を削除し、再び加える関数が追加されました。 ( lvaro Herrera(10)
</li>
<p>新たなSQL関数 brin_summarize_range()は指定された範囲の BRINインデックス要約を更新し、brin_desummarize_range()はそれを削除します。<br />
これは UPDATE と DELETE のために今やより小さくなった範囲の要約を更新するのに役立ちます。</p>
<li>
BRINインデックススキャンが有益かどうかの判断の精度が改善されました。 (David Rowley, Emre Hasegeli) (10)
</li>
<p>従来はBRIN使用コストを過剰に楽観的に見積もっていました。</p>
<li>インデックス空間をより効率的に再利用することで、より速いGiSTの挿入と更新が可能になりました。(Andrey Borodin) (10)</li>
<li>GINインデックスのバキュームの間のページロック取得が減りました。 (Andrey Borodin) (10)</li>
</ul>
<h5>ロック</h5>
<ul>
<li>
テーブルパラメータを変更するのに求められるロック取得が減りました。(Simon Riggs, Fabr zio Mell)(10)
</li>
<p>例えば、テーブルの effective_io_concurrency設定の変更がより軽量なロックで可能になりました。</p>
<li>
述語ロックの昇格閾値を調整できるようになりました。 (Dagfinn Ilmari Manns k)(10)
</li>
<p>ロック昇格が二つの新たなサーバパラメータmax_pred_locks_per_relation、max_pred_locks_per_page を通して制御できるようになります。</p>
</ul>
<h5>オプティマイザ</h5>
<ul>
<li>
相関率と値の種類数を計算するための複数列オプティマイザ統計が追加されました。(Tomas Vondra, David Rowley, lvaro Herrera(10)
</li>
<p>そのために新たなコマンド CREATE STATISTICS、ALTER STATISTICS、DROP STATISTICS が追加されました。この機能は問い合わせのメモリ使用を見積りするのと、別々の列の統計を結びつけるときに役立ちます。</p>
<li>
行単位セキュリティの影響を受ける問い合わせの性能が改善されました。(Tom Lane) (10)
</li>
<p>オプティマイザはRLSフィルタ条件を置けるところでより多くの知識をもつようになり、RLS条件を強制しても安全で場合により良いプラン生成が可能になりました。</p>
</ul>
<h5>性能</h5>
<ul>
<li>
numeric型の計算を使った合計を計算する集約関数が高速化されました。 (Heikki Linnakangas) (10)
</li>
<p>SUM()、AVG()、およびSTDDEV()のいくつかの別形が含まれます。</p>
<li>基数木を使うことにより文字エンコーディング変換の性能が改善されました。 (Kyotaro Horiguchi, Heikki Linnakangas) (10)</li>
<li>
プランノード呼び出しオーバーヘッドと同様に、問い合わせ実行時の式評価のオーバーヘッドが削減されました。 (Andres Freund) (10)
</li>
<p>これは特に多数の行を処理する問い合わせに役立ちます。</li>
<li>グループ化セットでハッシュ集約を使えるようにしました。 (Andrew Gierth) (10)</li>
<li>いくつかの結合タイプの最適化でユニーク保証を使うようにしました。 (David Rowley) (10)</li>
<li>macaddrデータ型のソート性能が改善されました。 (Brandur Leach) (10)</li>
<li>何千ものリレーションを参照するセッションでの統計観測のオーバヘッドが軽減されました。 (Aleksander Alekseev) (10)</li>
</ul>
<h5>監視</h5>
<ul>
<li>
プラン作成と実行の時間のEXPLAINにおける表示について明示的な制御が可能になりました。 (Ashutosh Bapat) (10)
</li>
<p>デフォルトではプラン作成と実行の時間は EXPLAIN ANALYZE では表示され、他の場合には表示されません。新たな EXPLAIN オプションの SUMMARY はこれについて明示的な制御ができます。</p>
<p>「SUMMARY off」指定で末尾に「Planning time:」と「Execution time:」を出さなくした例:</p>
<pre>
db1=# EXPLAIN (ANALYZE, SUMMARY off) SELECT * FROM tbl;
                                            QUERY PLAN
--------------------------------------------------------------------------------------------------
 Seq Scan on tbl  (cost=0.00..22.70 rows=1270 width=36) (actual time=0.017..0.020 rows=3 loops=1)
(1 row)
</pre>
<li>
デフォルト監視ロールを追加しました。 (Dave Page) (10)
</li>
<p>新たなロール pg_monitor、pg_read_all_settings、pg_read_all_stats、および、pg_stat_scan_tablesがあらかじめ用意されています。</p>
<p>これらロールはpsqlで「\du」としても出力されず、「\duS」の一覧にあらわれます。</p>
<li>
REFRESH MATERIALIZED VIEWの際に統計コレクタを適切に更新するようにしました。 (Jim Mlodgenski) (10)
</li>
<p>これまではリフレッシュしたときに統計コレクタに報告されないケースがありました。バグ修正ですがバックポートしにくい箇所が含まれていました。</p>
</ul>
<h5>監視/ログ</h5>
<ul>
<li>
log_line_prefix のデフォルト値がサーバログの各行に現在タイムスタンプ（ミリ秒を含む）とプロセスIDを含むように変更されました。 (Christoph Berg) (10)
</li>
<p>以前のデフォルトは空でした。</p>
<li>
ログおよびWALのディレクトリ内容を返す関数が追加されました。 (Dave Page) (10)
</li>
<p>新たな関数 pg_ls_logdir() および pg_ls_waldir() は適切な権限があれば非スーパーユーザでも実行できます。</p>
<li>ログコレクタの現在の stderr と csvlog出力のファイル名を読み取る関数 pg_current_logfile()が追加されました。 (Gilles Darold) (10)</li>
<li>
postmaster起動時のサーバログで各待ち受けソケットについてアドレスとポート番号を報告するようになりました。 (Tom Lane) (10)
</li>
<p>また、待ち受けソケットのバインド失敗がログ出力されるとき、バインドを試みた特定アドレスがログに含まれるようになります。</p>
<pre>
起動メッセージ例：
2017-10-24 14:35:02.468 JST [6984] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2017-10-24 14:35:02.533 JST [6984] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2017-10-24 14:35:02.630 JST [6984] LOG:  redirecting log output to logging collector process
2017-10-24 14:35:02.630 JST [6984] HINT:  Future log output will appear in directory "log".

起動失敗メッセージ例：
2017-10-24 14:39:47.346 JST [7147] LOG:  could not bind IPv4 address "10.10.10.72": Address already in use
2017-10-24 14:39:47.346 JST [7147] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2017-10-24 14:39:47.346 JST [7147] WARNING:  could not create listen socket for "10.10.10.72"
2017-10-24 14:39:47.346 JST [7147] FATAL:  could not create any TCP/IP sockets
</pre>
<li>
ランチャーサブプロセスの開始と停止についてログのおしゃべりを削減しました。 (Tom Lane) (10)
</li>
<p>「autovacuum launcher started」や「logical replication launcher shutting down」はDEBUG1レベルのメッセージとなります。</p>
<li>
log_min_messages で制御される小さい数のデバッグレベル（DEBUG3以下）でのメッセージの冗長度を減らしました。 (Robert Haas) (10)
</li>
<p>また、client_min_messages のデバッグレベルにおいても冗長度を変更しました。</p>
</ul>
<h5>監視/pg_stat_activity</h5>
<ul>
<li>
pg_stat_activity に低レベル待機状態の報告が加わりました。 (Michael Paquier, Robert Haas, Rushabh Lathia) (10)
</li>
<p>この変更で多数の低レベル待機状態の報告が可能になりました。この中にはラッチ待機、ファイルの読み/書き/同期、クライアントの読み/書き、および、同期レプリケーションが含まれます。</p>
<p>待機状態を表示させた例：</p>
<pre>
=# SELECT pid, wait_event_type, wait_event, state FROM pg_stat_activity ;
 pid  | wait_event_type |     wait_event      |        state
------+-----------------+---------------------+---------------------
 7316 | Activity        | AutoVacuumMain      |
 7318 | Activity        | LogicalLauncherMain |
 7474 |                 |                     | idle in transaction
 7354 | Client          | ClientRead          | idle
 7357 |                 |                     | active
 7475 | Lock            | transactionid       | active
 7476 |                 |                     | idle in transaction
 7519 | LWLock          | lock_manager        | active
 7314 | Activity        | BgWriterHibernate   |
 7313 | Activity        | CheckpointerMain    |
 7315 | Activity        | WalWriterMain       |
(10 rows)
</pre>
<li>
pg_stat_activityで補助プロセス、バックグラウンドワーカ、およびwalsenderプロセスが表示されるようになりました。 (Kuntal Ghosh, Michael Paquier) (10)
</li>
<p>これは監視を容易にします。新たな列 backend_type がプロセスタイプを識別します。</p>
<p>pg_stat_activity.backend_type の出力例：</p>
<pre>
db1=# SELECT pid, backend_type FROM pg_stat_activity ;
 pid  |    backend_type
------+---------------------
 7316 | autovacuum launcher
 7318 | background worker
 7320 | client backend
 7354 | client backend
 7357 | client backend
 7314 | background writer
 7313 | checkpointer
 7315 | walwriter
(8 rows)
</pre>
<li>pg_stat_activityで補助プロセス、バックグラウンドワーカ、およびwalsenderプロセスが表示されるようになりました。 (Kuntal Ghosh, Michael Paquier) (10)</li>
<p>これは監視を容易にします。新たな列 backend_type がプロセスタイプを識別します。</p>
<p>pg_stat_activity.backend_type の出力例：</p>
<pre>
db1=# SELECT pid, backend_type FROM pg_stat_activity ;
 pid  |    backend_type
------+---------------------
 7316 | autovacuum launcher
 7318 | background worker
 7320 | client backend
 7354 | client backend
 7357 | client backend
 7314 | background writer
 7313 | checkpointer
 7315 | walwriter
(8 rows)
</pre>
<li>pg_stat_activityでパラレルワーカで実行されているSQL問い合わせを見ることができるようになりました。 (Rafia Sabih) (10)</li>
<li>
pg_stat_activity.wait_event_type の値の LWLockTranche と LWLockNamedが LWLock に改名されました。 (Robert Haas) (10)
</li>
<p>これは出力をより一貫したものにします。</p>
</ul>
<h5>認証</h5>
<ul>
<li>
パスワードのネゴシエーションと格納に SCRAM-SHA-256 のサポートが追加されました。 (Michael Paquier, Heikki Linnakangas) (10)
</li>
<p>これは既存の md5 によるネゴシエーションと格納の方式よりも良いセキュリティを提供します。</p>
<li>
password_encryptionサーバパラメータが boolean から enum に変更されました。 (Michael Paquier) (10)
</li>
<p>これは追加的なパスワードハッシュオプションに対応するのに必要でした。これからは md5 か plain かを指定するようになります。</p>
<li>
pg_hba.conf の内容を表示するビュー pg_hba_file_rules が追加されました。 (Haribabu Kommi) (10)
</li>
<p>現在有効な設定状態ではなくファイル内容を表示します。</p>
<li>複数のRADIUSサーバに対応しました。 (Magnus Hagander) (10)</li>
</ul>
<h5>サーバ設定</h5>
<ul>
<li>
SSL設定が設定リロードで更新できるようになりました。 (Andreas Karlsson, Tom Lane) (10)
</li>
<p>しかしながら、SSL設定のリロードは、サーバのSSLキーがパスフレーズを必要とする場合、パスフレーズのプロンプトを再度出す手段が無いので、動作しません。この場合、PostgreSQLを再起動しない限り、元の設定が適用されます。</p>
<li>bgwriter_lru_maxpages の最大値が事実上無制限になりました。 (Jim Nasby) (10)</li>
</ul>
<h5>信頼性</h5>
<ul>
<li>
ファイルを作成または削除(unlink)した後に、その親ディレクトリにfsyncを実行するようになりました。 (Michael Paquier) (10)
</li>
<p>これは電源障害後のデータ損失のリスクを削減します。</p>
</ul>
<h5>信頼性/WAL</h5>
<ul>
<li>不要なチェックポイントと WALアーカイブを、これら処理がなければアイドル状態のシステムにおいては、実行しないようになりました。 (Michael Paquier) (10)</li>
<li>
WALに詳細情報を追加する wal_consistency_checkingサーバパラメータが追加されました。 (Kuntal Ghosh, Robert Haas) (10)
</li>
<p>これはスタンバイサーバでWALの正常性チェックを可能にします。あらゆる正常性チェック失敗はスタンバイ上で致命的エラーをひき起こします。</p>
<li>
設定可能な最大WALセグメントサイズが 1GB に増えました。 (Beena Emerson) (10)
</li>
<p>より大きいWALセグメントサイズで、より少ない archive_command の起動とより少ない WALファイル制御を実現できます。</p>
</ul>
<h4>レプリケーションとリカバリ</h4>
<ul>
<li>
スタンバイサーバにテーブルを論理レプリケートする機能が追加されました。 (Petr Jelinek) (10)
</li>
<p>論理レプリケーションは、異なる PostgreSQLメジャーバージョン間でのレプリケーションや選択的レプリケーションを含め、物理レプリケーションよりも柔軟に構成できます。</p>
<li>
synchronous_standby_names での出現順序にかかわりなくスタンバイサーバからのコミット承認を待てるようになりました。 (Masahiko Sawada) (10)
</li>
<p>これまではサーバは常に synchronous_standby_names の先頭に現れるアクティブなスタンバイを待機しました。新たな synchronous_standby_namesキーワード「ANY」は、順序にかかわりなく任意の数のスタンバイを待つことを可能にします。<br />
これはクォーラムコミットとして知られています。</p>
<li>ストリーミングでのバックアップとレプリケーションに必要な設定変更が削減されました。 (Magnus Hagander, Dang Minh Huong) (10)</li>
<li>
pg_hba.confのデフォルトでローカルホスト接続からのレプリケーションが使用可能になりました。 (Michael Paquier) (10)
</li>
<p>これまではpg_hba.confのレプリケーション接続の行はデフォルトではコメントアウトされていました。</p>
<li>
pg_stat_replicationにレプリケーション遅延時間を報告する列が追加されました。 (Thomas Munro) (10)
</li>
<p>新たな列はwrite_lag、flush_lag、および、replay_lagです。</p>
<li>
recovery.confでリカバリ停止点をログシーケンス番号(LSN)で指定できるようにしました。 (Michael Paquier) (10)
</li>
<p>これまでは停止点はタイムスタンプかXIDでしか指定できませんでした。</p>
<li>
pg_stop_backup()で、全WALがアーカイブされるのを待機することをしない動作モードが設けられました。 (David Steele) (10)
</li>
<p>pg_stop_backup()のオプションの第2引数でこの振る舞いを制御します。</p>
<li>
一時レプリケーションスロットを作成できるようになりました。 (Petr Jelinek) (10)
</li>
<p>一時スロットはセッション終了またはエラーで自動的に削除されます。</p>
<li>Access Exclusiveロックのより良い追跡で、ホットスタンバイのリプレイの性能が改善されました。 (Simon Riggs, David Rowley) (10)</li>
<li>2相コミットのリカバリ性能が高速化されました。 (Stas Kelvich, Nikhil Sontakke, Michael Paquier) (10)</li>
</ul>
<h4>問い合わせ</h4>
<ul>
<li>XML整形されたデータを行の集合に変換する XMLTABLE関数を追加しました。 (Pavel Stehule, Alvaro Herrera) (10)</li>
<li>
標準の行生成構文を UPDATE ... SET (column_list) = row_constructor で使えるようにしました。 (Tom Lane) (10)
</li>
<p>row_constructorはキーワードROWで始めることができるようになりました。これまでは省略する必要がありました。また、row_constructor内に table_name.* が生じた場合は、他での row_constructor の使用のように、複数列に展開されるようになります。</p>
<pre>
(9.6.x以前のバージョンでは以下の書き方がエラーになりました)
db1=# UPDATE t61 SET (c1, c2) = ROW (2, 2) WHERE id = 1;
ERROR:  syntax error at or near "ROW"

(10では以下のような書き方もできます)
db1=# UPDATE t61 SET (id, c1, c2) = ROW (t61a.*)
        FROM t61a WHERE t61.id = t61a.id;
UPDATE 1
</pre>
<li>
正規表現の大きい文字コード、特に U+7FF 以上のユニコード文字を扱う文字クラスが修正されました。 (Tom Lane) (10)
</li>
<p>これまでは、このような文字は [[:alpha:]] などのロケール依存文字クラスに属するものとして認識されませんでした。</p>
</ul>
<h4>ユーティリティコマンド</h4>
<ul>
<li>
自動的にパーティション制約を作り、タプルの挿入と更新の振り分けを行う、テーブルパーティショニング構文が追加されました。 (Amit Langote) (10)
</li>
<p>この構文は範囲パーティショニングとリストパーティショニングに対応します。</p>
<li>
AFTERトリガに行の変更を記録する遷移テーブルが追加されました。 (Kevin Grittner, Thomas Munro) (10)
</li>
<p>遷移テーブルはサーバサイド言語で書かれたトリガからアクセスできます。</p>
<li>
制限的な行単位セキュリティポリシーが可能になりました。 (Stephen Frost) (10)
</li>
<p>これまでは全てのセキュリティポリシーは許容的で、マッチする任意のポリシーはアクセスを許すことを意味しました。制限的ポリシーでは許可されたアクセスにマッチしなければなりません。これらのポリシータイプを組み合わせることもできます。</p>
<li>
外部キー制約を作るとき、REFERENCES権限のチェックを被参照テーブルにだけ行うようになりました。 (Tom Lane) (10)
</li>
<p>これまでは参照するテーブルのREFERENCES権限も必要でした。これはSQL標準の誤読から生じました。外部キー（あるいは何らか他のタイプの）制約を作るには、制約されるテーブルに所有権が必要で、加えてREFERENCES権限が必要というのはあまり意味がありません。</p>
<li>
スキーマのデフォルトのアクセス権限が設定可能になりました。 (Matheus Oliveira) (10)
</li>
<p>これは ALTER DEFAULT PRIVILEGES コマンドを使って行われます。あるロールでスキーマを作ったときの、作られたスキーマのデフォルト権限を設定できます。</p>
<li>
ある整数データ型に一致するシーケンスを作る CREATE SEQUENCE ASコマンドが追加されました。 (Peter Eisentraut) (10)
</li>
<p>これは基となる列の値の範囲に一致するシーケンスの作成を簡単にします。</p>
<pre>
(以下のように使用します)
db1=# CREATE SEQUENCE seq68 AS smallint;
CREATE SEQUENCE

db1=# SELECT * FROM pg_sequence WHERE seqrelid = 'seq68'::regclass;
 seqrelid | seqtypid | seqstart | seqincrement | seqmax | seqmin | seqcache | seqcycle
----------+----------+----------+--------------+--------+--------+----------+----------
    16450 |       21 |        1 |            1 |  32767 |      1 |        1 | f
(1 row)
</pre>
<li>
INSTEAD INSERTトリガを持つビューに対する COPY 《ビュー》 FROM ... が可能になりました。 (Haribabu Kommi) (10)
</li>
<p>このトリガには COPYで読み取られたデータ行が与えられます。</p>
<li>
唯一であるなら DDLコマンドで引数無しに関数名の指定が可能なりました。 (Peter Eisentraut) (10)
</li>
<p>その名前をもつ関数が一つだけしかないなら、以下例のように引数なしで関数名だけの DROP FUNCTION 等が可能です。この振る舞いはSQL標準で必要とされているものです。</p>
<pre>
(例)
db1=# CREATE FUNCTION my_function_70(int, text, timestamptz) RETURNS boolean
        LANGUAGE sql AS $$ SELECT true; $$;
CREATE FUNCTION
db1=# ALTER FUNCTION my_function_70 IMMUTABLE;
ALTER FUNCTION
db1=# DROP FUNCTION my_function_70;
DROP FUNCTION
</pre>
<li>
複数の関数、演算子、および集約が一つの DROPコマンドで削除できるようになりました。 (Peter Eisentraut) (10)
</li>
<pre>
(以下の書き方ができるようになります)
db1=# DROP FUNCTION my_function_71a, my_function_71b, my_function_71c;
DROP FUNCTION
</pre>
<li>CREATE SERVER、CREATE USER MAPPING、および、CREATE COLLATION にて、「IF NOT EXISTS」構文に対応しました。 (Anastasia Lubennikova, Peter Eisentraut) (10)</li>
<li>
VACUUM VERBOSE がスキップした凍結されたページの数と最も古いxminを報告するようになりました。 (Masahiko Sawada, Simon Riggs) (10)
</li>
<p>この情報は log_autovacuum_min_duration 設定に基づくログ出力にも含まれるようになります。</p>
<li>VACUUMが末尾の空ヒープページを除去する速度を改善しました。 (Claudio Freire, Alvaro Herrera) (10)</li>
</ul>
<h4>データ型</h4>
<ul>
<li>
テキスト検索がJSONとJSONBに対応しました。 (Dmitry Dolgov) (10)
</li>
<p>関数ts_headline()とto_tsvector()がこれらのデータ型に対して使用できるようになりました。</p>
<li>
新たなデータ型macaddr8 として EUI-64形式の MACアドレスに対応しました。 (Haribabu Kommi) (10)
</li>
<p>これは既存の EUI-48形式の MACアドレスの対応（macaddr型）を補完します。</p>
<li>
挿入する列に数値を割り当てるための構文 GENERATED .. AS IDENTITY が追加されました。 (Peter Eisentraut) (10)
</li>
<p>これはSERIAL列と似ていますが、こちらの方がSQL標準準拠です。</p>
<pre>
(以下のように使用できます)
db1=# CREATE TABLE t77 (id int GENERATED ALWAYS AS IDENTITY, v text);
CREATE TABLE
db1=# INSERT INTO t77 (v) VALUES ('AA'), ('BB'), ('CC');
INSERT 0 3
db1=# SELECT * FROM t77;
 id | v
----+----
  1 | AA
  2 | BB
  3 | CC
(3 rows)
</pre>
<li>
ENUM値が改名できるようになりました。 (Dagfinn Ilmari Mannsaker) (10)
</li>
<p>ALTER TYPE ... RENAME VALUE ... で以下のように改名できます。</p>
<pre>
db1=# CREATE TYPE enum78 AS ENUM ('X', 'Y', 'Z');
db1=# CREATE TABLE t78 (c enum78);
db1=# INSERT INTO t78 VALUES ('X'),('Y'),('Z');
db1=# ALTER TYPE enum78 RENAME VALUE 'Z' TO 'ZZ';
db1=# SELECT * FROM t78;
 c
----
 X
 Y
 ZZ
(3 rows)
</pre>
<li>
配列の擬似型(anyarray)を to_json() と to_jsonb() で配列として適切に扱うようになりました。 (Andrew Dunstan) (10)
</li>
<p>これまでは anyarray として宣言された列（特に pg_statsビューの内のもの）が配列でなく JSON文字列に変換されていました。</p>
<li>
money型の値とint8型の値の積と除算の演算子が追加されました。 (Peter Eisentraut) (10)
</li>
<p>これまではこのような場合、結果として int8型の値が float8型に変換されて、money型とfloat8型の演算子が使われていました。新たな振る舞いは起こりうる精度損失を回避します。しかし、money型の int8型での除算は、他の整数除算の場合のように商を切り捨てするようになったことに注意してください。一方、従来の振る舞いでは丸めていました。</p>
<li>money型の入力関数でオーバーフローの検査をするようになりました。 (Peter Eisentraut) (10)</li>
</ul>
<h4>関数</h4>
<ul>
<li>
簡易化したregexp_match()関数が追加されました。 (Emre Hasegeli) (10)
</li>
<p>これは regexp_matches() と似ていますが、最初のマッチからの結果だけを返すので集合を返す必要がなく、単純な場合により簡単に使えます。</p>
<li>
jsonb の削除演算子として、削除するキー配列を取る版が追加されました。 (Magnus Hagander) (10)
</li>
<pre>
<ul>
(以下のように使用できます)
db1=# SELECT '{"a":10, "b":20, "c":30}'::jsonb - '{a,c}'::text[];
 ?column?
-----------
 {"b": 20}
(1 row)
</pre>
<li>
json_populate_record()と関連する関数がJSONの配列とオブジェクトを再帰的に処理するようになりました。 (Nikita Glukhov) (10)
</li>
<p>この変更で、あて先のSQL型の配列型フィールドが適切にJSON配列から変換され、複合型フィールドは適切にJSONオブジェクトから変換されます。これまでこのような場合は、JSON値のテキスト表現が array_in() または record_in() に与えられて、その構文が入力関数の期待と一致しないために、失敗していました。</p>
<pre>
(10で以下のような処理が可能になりました)
db1=# CREATE TYPE typ84 AS (k1 int, v1 int);
db1=# CREATE TABLE t84 (id int, v typ84);
db1=# SELECT * from json_populate_record(null::t84, '{"id":1, "v":{"k1":1, "v1": 10}}');
 id |   v
----+--------
  1 | (1,10)
(1 row)
db1=# SELECT (v).v1 from json_populate_record(null::t84, '{"id":1, "v":{"k1":1, "v1":10}}');
 v1
----
 10
(1 row)
</pre>
<li>
現在のトランザクションIDか、トランザクションIDが割り当てされていないときには NULLを返す関数txid_current_if_assigned()が追加されました。 (Craig Ringer) (10)
</li>
<p>txid_current()とは異なり、トランザクションIDが割り当てされていないときにトランザクションIDを新たに割り当てようとしないため、本関数はスタンバイサーバでも実行できます。</p>
<li>
あるトランザクションがコミットされたかどうかチェックする関数 txid_status()が追加されました。 (Craig Ringer) (10)
</li>
<p>これは突発切断後において、前トランザクションがコミット済で応答を受け取れなかっただけなのか、コミットもされていないのかを検査するのに有益です。</p>
<li>make_date()がマイナス年をBC年と解釈できるようになりました。 (Alvaro Herrera) (10)</li>
<li>
to_timestamp()とto_date()が範囲外の入力フィールドを拒否するようになりました。 (Artur Zakirov) (10)
</li>
<p>例えば、これまでは to_date('2009-06-40','YYYY-MM-DD') は受け入れられて 2009-07-10 を返しました。これからはエラーが生じます。</p>
</ul>
<h4>サーバサイド言語</h4>
<ul>
<li>
PL/Pythonの cursor()関数と execute()関数をそれらのプランオブジェクト引数のメソッドとして呼べるようになりました。 (Peter Eisentraut) (10)
</li>
<p>よりオブジェクト指向プログラミング的なスタイルが可能になります。</p>
<li>
PL/pgSQLの GET DIAGNOSTICS文が配列要素に値を取り込むめるようになりました。 (Tom Lane) (10)
</li>
<p>これまでは、構文上の制限であて先の変数を配列要素にすることが妨げられていました。</p>
</ul>
<h5>PL/Tcl</h5>
<ul>
<li>PL/Tcl関数が複合型と集合を返せるようになりました。 (Karl Lehenbauer) (10)</li>
<li>
PL/Tclにサブトランザクションコマンドが追加されました。 (Victor Wagner) (10)
</li>
<p>これにより PL/Tclの問い合わせが関数全体の中断なしに失敗できるようになります。</p>
<li>
サーバパラメータpltcl_start_proc、pltclu_start_proc が追加されました。 (Tom Lane) (10)
</li>
<p>PL/Tcl開始に際して初期化関数が呼ばれるようにできます。</p>
</ul>
<h4>クライアントインタフェース</h4>
<ul>
<li>
libpqの接続文字列とURIで複数のホスト名またはアドレスを指定できるようになりました。 (Robert Haas, Heikki Linnakangas) (10)
</li>
<p>libpqはリスト中の最初の応答するサーバに接続します。</p>
<pre>
(以下のように複数サーバを記述できます)
$ psql 'host=dbhost1,dbhost2 port=5432,5432 dbname=db1 user=user1'
</pre>
<li>
libpq接続文字列とURIが読み/書きホストを要求できるようになりました。 (Victor Wagner, Mithun Cy) (10)
</li>
<p>libpqの接続パラメータ target_session_attrs で、'any' でなく 'read-write' を指定すると、読み書き可能な接続に限定されます。<br />
ホットスタンバイサーバでなくマスタサーバでなければならないという指定に応用できます。なお、ALTER ROLE ... SET default_transaction_read_only TO on; としてあるロールで接続を試みた場合も、接続に失敗するようになります。</p>
<p>以下例では、5432ポートの PostgreSQLに接続すると readonlyになる場合には、2番目の 5433ポートの PostgreSQL に接続されます。</p>
<pre>
$ psql 'host=127.0.0.1,127.0.0.1 port=5432,5433 dbname=db1 user=u1 target_session_attrs=read-write'
</pre>
<li>
パスワードファイル名を libpq の接続パラメータとして指定できるようになりました。 (Julian Markwort) (10)
</li>
<p>これまでは環境変数を通してのみ指定できました。</p>
<li>
クライアント側でより多くの暗号化パスワードタイプを作ることができる、関数 PQencryptPasswordConn() が追加されました。 (Michael Paquier, Heikki Linnakangas) (10)
</li>
<p>これまでは MD5で暗号化されたパスワードのみが PQencryptPassword() を使って作成できました。新たな関数は SCRAM-SHA-256 で暗号化されたパスワードも作成できます。</p>
<li>
ecpgプリプロセッサバージョンが 4.12 から 10 に変更されました。 (Tom Lane) (10)
</li>
<p>今後は ecpgバージョンが PostgreSQL配布バージョン番号と一致します。</p>
</ul>
<h4>クライアントアプリケーション</h4>
<h5>psql</h5>
<ul>
<li>
psqlが条件分岐に対応しました。 (Corey Huinker) (10)
</li>
<p>この機能は psql にメタコマンド \if、\elif、\else、\endif を加えます。主としてスクリプト作成に役立ちます。</p>
<li>
psql に \gxメタコマンドを追加しました。 (Christoph Berg) (10)
</li>
<p>これは拡張モード（\x）で問い合わせを実行（\g）します。</p>
<li>
psqlの変数参照をバッククォート実行の文字列内でも利用可能になりました。 (Tom Lane) (10)
</li>
<p>これは特に新たな psql の条件分岐コマンドにおいて役立ちます。</p>
<pre>
(psqlスクリプトでの使用例)
\set param 123
\echo `judge is:`
\echo `/opt/bin/judge.sh :param`
\if `/opt/bin/judge.sh :param`
  \i special_proc.sql
\endif
</pre>
<li>psql の特別変数が不正な値に設定されるのを防止しました。 (Daniel Verite, Tom Lane) (10)</li>
<li>
これまでは、psqlの特別変数を不正な値に設定すると、特にエラーが出ないまま、結果としてデフォルトの振る舞いになりました。これからは特別変数に対する \set で指定値が無効であったときエラーになります。
</li>
<p>特例として真偽値を持つ特別変数に対する空または省略された新たな値での \set は、依然として値を on に設定した効果を持ちます。ただし、この場合でも特別変数に空文字が保持されることはなくなります。</p>
<pre>
(以下は9.6.x以前バージョンではエラーが出ませんでした)
db1=# \set FETCH_COUNT xxx
invalid value "xxx" for "FETCH_COUNT": integer expected

（以下は9.6.x以前のバージョンですと変数値が空文字列になっていました）
db1=# \set AUTOCOMMIT
db1=# \echo :AUTOCOMMIT
on
</pre>
<p>また、特別変数に対する \unset は、これからは明示的に値をそのデフォルト値に設定します。</p>
<li>
サーババージョンとpsqlバージョンを表示する変数を追加しました。 (Fabien Coelho) (10)
</li>
<p>変数 VERSION_NUM、VERSION_NAME、SERVER_VERSION_NUM、SERVER_VERSION_NAME が利用できます。</p>
<li>
psqlの \d（リレーションを表示）と \dD（ドメインを表示）コマンドが、照合順序、NULL可能か、および、個々の列のデフォルト属性を表示するように改良されました。 (Peter Eisentraut) (10)
</li>
<p>これまではこれらは一つの Modifiers 列の中に示されていました。</p>
<li>
\d コマンドがマッチするオブジェクトが無い場合により一貫性のある処理をするようになりました。 (Daniel Gustafsson) (10)
</li>
<p>これからは全てのメッセージを stdout でなく stderr に出力するようになり、メッセージの文言もより一貫性をもったものになります。</p>
<li>psqlのタブ補完が改良されました。 (Jeff Janes, Ian Barwick, Andreas Karlsson, Sehrope Sarkuni, Thomas Munro, Kevin Grittner, Dagfinn Ilmari Mannsaker) (10)</li>
</ul>
<h5>pgbench</h5>
<ul>
<li>pgbench にログファイルのプレフィックスを制御するオプション --log-prefixが追加されました。 (Masahiko Sawada) (10)</li>
<li>
pgbenchで複数行にわたるメタコマンドが書けるようになりました。 (Fabien Coelho) (10)
</li>
<p>行末にバックスラッシュを書いて次行に継続できるようになります。</p>
<li>
pgbench で -Mオプションの、他のコマンドラインオプションと関連する位置の制限が取り除かれました。 (Tom Lane) (10)
</li>
<p>以前は -M はベンチマークスクリプトを規定するオプション（-f や -b) より先に現れる必要がありました。</p>
</ul>
<h4>サーバアプリケーション</h4>
<ul>
<li>pg_receivewal の圧縮を指定するオプション -Z / --compress を追加しました。 (Michael Paquier) (10)</li>
<li>
pg_recvlogical に終了点を指定するオプション --endpos が追加されました。 (Craig Ringer) (10)
</li>
<p>これまでは --startpos オプションだけが在りました。</p>
<li>
initdb のオプション --noclean、--nosync が --no-clean、--no-sync と綴るように改名されました。 (Vik Fearing, Peter Eisentraut) (10)
</li>
<p>従来のオプション綴りにも未だ対応しています。</p>
</ul>
<h5>pg_dump/pg_restore</h5>
<ul>
<li>
pg_restore がスキーマを除外できるようになりました。 (Michael Banck) (10)
</li>
<p>新たに -N / --exclude-schema オプションが追加されます。</p>
<li>
pg_dump に --no-blobs オプションが追加されました。 (Guillaume Lelarge) (10)
</li>
<p>これはラージオブジェクトをダンプから除外します。</p>
<li>
pg_dumpall にロールのパスワードを無視するオプション --no-role-passwords が追加されました。 (Robins Tharakan, Simon Riggs) (10)
</li>
<p>これにより非スーパーユーザからの pg_dumpall が可能になります。本オプションが無いとパスワードが読めないためにエラーになります。</p>
<li>
スタンバイサーバからのダンプでの同期スナップショットの使用に対応しました。 (Petr Jelinek) (10)
</li>
<p>これにより pg_dump の -j オプションをスタンバイサーバに対しても使用できるようになります。</p>
<li>
pg_dump と pg_dumpall で生成された出力ファイルに対して fsync() を発行するようになりました。 (Michael Paquier) (10)
</li>
<p>プログラム終了前に出力が安全にディスク上に格納されるという、より良い安全性を提供します。この動作は新たな --no-sync オプションで無効にできます。</p>
</ul>
<h5>pg_basebackup</h5>
<ul>
<li>
pg_basebackup が tarモード(-Ft)で WALストリーミング(-Xs)ができるようになりました。(Magnus Hagander) (10)
</li>
<p>このとき WAL はベースバックアップとは別の tar ファイルに格納されます。</p>
<li>
pg_basebackup が一時レプリケーションスロットを使うようになりました。 (Magnus Hagander) (10)
</li>
<p>pg_basebackup がデフォルトオプションでWALストリーミングを使うとき、一時レプリケーションスロットはデフォルトで使われます。</p>
<li>
pg_basebackup と pg_receivewal において、必要とされる場所での fsync実行について、より注意深く行われるようになりました。 (Michael Paquier) (10)
</li>
<p>潜在的な OSダウン時のデータ損失の可能性を減らす意図の改修です。</p>
<li>pg_basebackup に fsync を無効にするオプション --no-sync が追加されました。 (Michael Paquier) (10)</li>
<li>pg_basebackup のどのディレクトリを読み飛ばすかの制御が改良されました。 (David Steele) (10)</li>
</ul>
<h5>pg_ctl</h5>
<ul>
<li>
pg_ctl の昇格操作むけ待機オプションが追加されました。 (Peter Eisentraut) (10)
</li>
<p>-w で昇格完了を待つことができるようになります。</p>
<li>pg_ctl に待機（--wait）、待機無し（--no-wait）のロングオプションが追加されました。 (Vik Fearing) (10)</li>
<li>pg_ctlのサーバオプション(-o)にロングオプション(--options)が追加されました。 (Peter Eisentraut) (10)</li>
<li>
pg_ctl start --wait が接続を試みるのではなく、postmaster.pid を監視してサーバの準備完了を検出するようになりました。 (Tom Lane) (10)
</li>
<p>postmaster はその接続受付状態を postmaster.pid に報告するように変更されました。そして、pg_ctl はそのファイルを調べて起動が完了したかを検出します。これは従来の方法よりも効率的で信頼でき、起動当初の pg_ctl による接続試行がログに記録されずに済みます。</p>
<li>
postmasterの起動/停止を待機するときの pg_ctl の応答時間が短縮されました。 (Tom Lane) (10)
</li>
<p>pg_ctl は postmaster の状態変更を待つときに、これからは1秒に1回ではなく、1秒に10回検査します。</p>
<li>
待たされている操作がタイムアウト内に完了しなかった場合、pg_ctl が非ゼロステータスで終了することを保証しました。 (Peter Eisentraut) (10)
</li>
<p>start、promote 操作は、このような場合に終了ステータスに 0 でなく 1 を返すようになりました。stop操作は以前から常にそのようになっていました。</p>
</ul>
<h4>ソースコード</h4>
<ul>
<li>
二要素のリリースバージョン番号に変更されました。 (Peter Eisentraut, Tom Lane) (10)
</li>
<p>リリース番号はこれからは三要素（例えば 9.6.3）でなく二要素になります（例えば、10.1）。メジャーバージョンは一番目の数だけが増え、マイナーリリースは二番目に数だけが増えます。リリースブランチは単一の数で参照されます（例えば 9.6 でなく 10）。これまでは最初の二つの数がメジャーリリース、最後の数がマイナーリリースでした。</p>
<li>
pgindent の振る舞いが改良されました。 (Piotr Stefaniak, Tom Lane) (10)
</li>
<p>FreeBSDプロジェクトによる最近の改良に基づく pg_bsd_indent の新バージョンに切り替えられました。これはおかしなCコード整形の判断をする多数の小さなバグを修正します。最も特記すべきは、たとえ結果としてコードが右端を超えて延びても、（複数行の関数呼び出しのような）括弧内の複数行が開き丸括弧でインデントが揃えられるようになったことです。</p>
<li>
ICUライブラリが照合順序の対応にオプションで使用できるようになりました。 (Peter Eisentraut) (10)
</li>
<p>ICUライブラリはバージョン間での照合順序の変更がわかるバージョン付けをしています。これはconfigureオプション --with-icu で有効にできます。デフォルトでは未だオペレーティングシステム固有の照合順序ライブラリを使います。<br />
yum.postgresql.org サイトでの配布物では --with-icu オプションが使われています。</p>
<li>
Windows上で自動的に全ての PG_FUNCTION_INFO_V1関数を DLLEXPORTされたものと印付けするようになりました。 (Laurenz Albe) (10)
</li>
<p>サードパーティコードで extern関数宣言を使っている場合、DLLEXPORTマーカーをそれらの宣言に加える必要があります。</p>
<li>
SPI関数のSPI_push()、SPI_pop()、SPI_push_conditional()、SPI_pop_conditional()、SPI_restore_connection() は必要ないため除去されました。 (Tom Lane) (10)
</li>
<p>これら関数の機能はこれからは自動的に行われます。外部モジュールが直ちにアップデートを必要としないように、これら関数はその名前の何もしないマクロとなりますが、最終的にはこれらも取り除かれるはずです。</p>
<p>本変更の副作用は、SPI_palloc() と付随する関数がこれからはアクティブなSPI接続を必要とすることです。接続が無い場合、これからは単純な palloc() に縮退しません。従来の振る舞いは必ずしも便利ではなく予期せぬメモリリークの危険性が生じました。</p>
<li>共有メモリを動的に割り当てできるようになりました。 (Thomas Munro, Robert Haas) (10)</li>
<li>効果的な固定サイズ割り当てのためにスラブのようなメモリアロケータが追加されました。 (Tomas Vondra) (10)</li>
<li>
Linux と FreeBSD において　SysVセマフォではなく POSIXセマフォを使用するようになりました。 (Tom Lane) (10)
</li>
<p>これにより、プラットフォームで SysVセマフォ使用量の上限に注意したり、調整したりする必要がなくなります。</p>
<li>64-bitでの原子性の対応が改善されました。 (Andres Freund) (10)</li>
<li>ARM64 の 64bitの原子的操作が有効になりました。 (Roman Shaposhnik) (10)</li>
<li>
可能であれば遅延の計測にclock_gettime()を使うように切り替えました。 (Tom Lane) (10)
</li>
<p>clock_gettime() が使えないときには gettimeofday が依然として使われます。</p>
<li>
暗号による保護の用途で使われるより頑健な乱数生成器が加わりました。 (Magnus Hagander, Michael Paquier, Heikki Linnakangas) (10)
</li>
<p>強い乱数生成器が見つからないと、configure は --disable-strong-random が指定されていない限り、失敗します。しかしながら、このオプション付きですと強いランダム生成器を必要とする pgcrypto関数は使用できません。</p>
<li>WaitLatchOrSocket()がWindowsでソケット接続を待つことができるようになりました。 (Andres Freund) (10)</li>
<li>
tupconvert.c の関数はもはやタプルを単にそれらの中に異なる複合型のOIDを組み込むようには変換しなくなりました。 (Ashutosh Bapat, Tom Lane) (10)
</li>
<p>多数派の呼び出し元は複合型OIDについて考慮しませんが、結果タプルが複合Datumとして使われる場合、正しいIDがその中に挿入されるのを確かめる手順となります。</p>
<li>SCO と Unixware への移植対応が取り除かれました。 (Tom Lane) (10)</li>
<li>文書のビルド手順が全面的に書き換えられました。 (Alexander Lakhin) (10)</li>
<li>
PostgreSQL文書をビルドするのに XSLT を使用するようになりました。 (Peter Eisentraut) (10)
</li>
<p>これまでは Jade、DSSSLおよびJadeTexが使われていました。</p>
<li>デフォルトで XSLT のスタイルシートを使って HTML文書をビルドするようになりました。 (Peter Eisentraut) (10)</li>
</ul>
<h4>追加モジュール</h4>
<ul>
<li>file_fdw がファイル同様にプログラム出力結果から読み取りできるようになりました。 (Corey Huinker, Adam Gomaa) (10)</li>
<li>
postgres_fdwで、可能であれば集約関数をリモートサーバにプッシュするようになりました。 (Jeevan Chalke, Ashutosh Bapat) (10)
</li>
<p>これはリモートサーバから渡されなければならないデータ量を減らし、集約計算の負担を要求元サーバから取り除きます。</p>
<li>postgres_fdwで、より多くの場合に結合をリモートサーバにプッシュするようになりました。 (David Rowley, Ashutosh Bapat, Etsuro Fujita) (10)</li>
<li>
postgres_fdwテーブルのOID列を適切にサポートしました。 (Etsuro Fujita) (10)
</li>
<p>これまではOID列は常にゼロを返しました。</p>
<li>
btree_gist と btree_gin でenum型のインデックスが可能になりました。 (Andrew Dunstan) (10)
</li>
<p>これにより enum が排他制約に使用できます。</p>
<li>UUIDデータ型に対する btree_gistインデックスに対応しました。 (Paul Jungwirth) (10)</li>
<li>B-treeインデックスの妥当性を検査できる amcheck が追加されました。 (Peter Geoghegan) (10)</li>
<li>pg_stat_statements で無視された内容が ? ではなく$N と表示されるようになりました。 (Lukas Fittl) (10)</li>
<li>cubeのゼロ次元キューブの扱いが改善されました。 (Tom Lane) (10)</li>
<li>
pg_buffercacheがより少ないロックで実行可能になりました。 (Ivan Kartyshov) (10)
</li>
<li>
pgstattupleにハッシュインデックスの統計情報を参照する関数pgstathashindex()が追加されました。 (Ashutosh Sharma) (10)
</li>
<li>
pgstattupleの関数の使用を制御するのに GRANT で権限を与えるようにしました。 (Stephen Frost) (10)
</li>
<p>データベース管理者がこれらの関数を非スーパーユーザで実行可能にできるようになります。</p>
<li>pgstattuple がハッシュインデックスを調べるときのロック取得が軽減されました。 (Amit Kapila) (10)</li>
<li>pageinspect にページのチェックサムを表示する関数page_checksum()が追加されました。 (Tomas Vondra) (10)</li>
<li>pageinspectにページイメージからページ要素を出力する関数bt_page_items()が追加されました。 (Tomas Vondra) (10)</li>
<li>pageinspectがハッシュインデックス対応しました。 (Jesper Pedersen, Ashutosh Sharma) (10)</li>
</ul>
<h3>リリースノートに記載の無い変更点</h3>
<ul>
<li>標準SQLで特別な構文が定義されている CURRENT_DATE のようなパラメータレス関数の実装が改善された変更の影響で、SELECT 文で表示される列名が変更されました。以前のバージョンでは、関数名と異なる実装依存の列名や他と同一の列名でしたが、本バージョンでは関数名通りの列名となりました。</li>
<p>SELECT文で表示される列名の変更があった関数は下記の通りです。</p>
<pre>
 関数名            | PostgreSQL 9.6.x での出力列名
-------------------+-------------------------------
 current_date      | date
 current_time      | timetz
 current_timestamp | now
 localtime         | time
 localtimestamp    | timestamp
 current_role      | current_user
 user              | current_user
 current_catalog   | current_database
</pre>
</ul>
</p>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/pgsql-mainte/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-pgsql" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、PostgreSQL/Pgpool-II のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
