From 2389adc76eb808ae5c54c53778e8769d22ea841f Mon Sep 17 00:00:00 2001 From: Noboru Saito Date: Mon, 16 Feb 2026 23:52:34 +0900 Subject: [PATCH] =?UTF-8?q?func.sgml=E3=81=AE18.0=E3=82=92=E3=83=9E?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=81=97=E3=81=A618.1=E3=81=AE=E6=BA=96?= =?UTF-8?q?=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/src/sgml/func.sgml | 10147 +++++++++++++++++++++++++++++++++++++- doc/src/sgml/func1.sgml | 109 +- doc/src/sgml/func2.sgml | 159 +- doc/src/sgml/func3.sgml | 39 +- doc/src/sgml/func4.sgml | 131 +- 5 files changed, 10331 insertions(+), 254 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 6fd18fd6731..d0553b04a76 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,17 +1,27 @@ + + 関数と演算子 function + + 関数 + operator + + 演算子 + + +PostgreSQLは組み込みデータ型に対して数多くの関数と演算子を用意しています。 +この章ではそのほとんどについて説明しますが、特殊用途の関数はマニュアルの関連する節に記載しています。 +また、で解説しているように、ユーザは独自の関数と演算子を定義することもできます。 +psql\dfコマンドと\doコマンドはそれぞれ全ての使用可能な関数と演算子をリストするのに使用されます。 + +この章全体で関数と演算子の引数と戻り値のデータ型の記述は以下のようになります。 repeat ( text, integer ) text + +つまり関数repeatは、一つのテキスト型と一つの整数型の引数を取り、テキスト型の結果を返します。 +また、右矢印を使ってある例の結果を示します。ですから、以下のようになります。 repeat('Pg', 4) PgPgPgPg + +もし移植性が気になるのであれば、最も基本的な算術および比較演算子と、いくつかの明示的に印を付けた関数を除き、本章で説明する大多数の関数と演算子は、標準SQLで規定されていない点に注意してください。 +この拡張機能のいくつかは、他のSQLデータベース管理システムにも備わっており、多くの場合この機能には各種実装間で互換性と整合性があります。 + + + + 論理演算子 operator logical + + 演算子 + 論理 + Boolean operators operators, logical + + 論理値 + 演算子 + 演算子, 論理 + + + 通常の論理演算子が使用できます。 AND (operator) + + AND(演算子) + OR (operator) + + OR(演算子) + NOT (operator) + + NOT(演算子) + conjunction + + 論理積 + disjunction + + 論理和 + negation + + 否定 + boolean AND boolean boolean @@ -96,9 +157,13 @@ repeat('Pg', 4) PgPgPgPg NOT boolean boolean + +SQLはtrue、false、そして不明を意味するnullの3値の論理システムを使用します。 +以下の真理値表を参照してください。 @@ -187,35 +252,59 @@ repeat('Pg', 4) PgPgPgPg + +AND演算子とOR演算子は可換です。 +つまり、結果に影響を与えることなく左右のオペランドを交換することができます。 +(しかし、左オペランドが右オペランドよりも先に評価されるという保証はありません。副式の評価順についてのより詳細はを参照してください。) + + 比較関数および演算子 comparison operators + + 比較 + 演算子 + + +に示すように、通常の比較演算子が使用可能です。 + + 比較演算子 + + 演算子 + + 説明 @@ -225,7 +314,10 @@ repeat('Pg', 4) PgPgPgPgdatatype<datatypeboolean + + 小なり @@ -233,7 +325,10 @@ repeat('Pg', 4) PgPgPgPg datatype > datatype boolean + + 大なり @@ -241,7 +336,10 @@ repeat('Pg', 4) PgPgPgPg datatype <= datatype boolean + + 等しいかそれ以下 @@ -249,7 +347,10 @@ repeat('Pg', 4) PgPgPgPg datatype >= datatype boolean + + 等しいかそれ以上 @@ -257,7 +358,10 @@ repeat('Pg', 4) PgPgPgPg datatype = datatype boolean + + 等しい @@ -265,7 +369,10 @@ repeat('Pg', 4) PgPgPgPg datatype <> datatype boolean + + 等しくない @@ -273,7 +380,10 @@ repeat('Pg', 4) PgPgPgPg datatype != datatype boolean + + 等しくない @@ -281,58 +391,93 @@ repeat('Pg', 4) PgPgPgPg + +<>が標準SQLにおける等しくないの記法です。 +!=はその別名で、構文解析のごく初期に<>に変換されます。 +ですから!=演算子と<>演算子に異なる処理を行わせる実装はできません。 + +これらの比較演算子は、数値、文字列、日付、時刻データ型などの自然な順序付けを持つすべての組み込みデータ型に用意されています。 +更に、要素となるデータ型が比較可能なら、配列、複合データ型、範囲は比較可能です。 + +通常関連性のあるデータ型も比較することができます。 +たとえばinteger >bigintも可能です。 +ある場合にはこれらの比較は型をまたがる比較演算子で直接実装されています。そうした演算子がなければ、パーサはより一般的ではない型をより一般的な型に変換して後者の比較演算子に適用します。 + +上で示したように、全ての比較演算子は二項演算子で、boolean型の値を返します。 +ですから1 < 2 < 3のような式は(ブール値と3を比較する<演算子がないので)無効です。 +下で示すBETWEEN述語を使って範囲検査を行ってください。 + +に示すように、比較述語がいくつかあります。 +これらは演算子と同様に振る舞いますが、標準SQLによって強制される特別の構文があります。
+ + 比較述語 + +述語 + +説明 + +例 @@ -344,7 +489,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +間にある(範囲の端点を含む)。 2 BETWEEN 1 AND 3 @@ -362,7 +510,10 @@ repeat('Pg', 4) PgPgPgPg boolean + +間にない(BETWEENの否定)。 2 NOT BETWEEN 1 AND 3 @@ -376,7 +527,10 @@ repeat('Pg', 4) PgPgPgPg boolean + +2つの端点値をソートした上で、間にある。 2 BETWEEN SYMMETRIC 3 AND 1 @@ -390,7 +544,10 @@ repeat('Pg', 4) PgPgPgPg boolean + +2つの端点値をソートした上で、間にない。 2 NOT BETWEEN SYMMETRIC 3 AND 1 @@ -404,15 +561,24 @@ repeat('Pg', 4) PgPgPgPg boolean + +NULLを比較可能な値とした上で、等しくない。 1 IS DISTINCT FROM NULL + + t (NULLではなく) NULL IS DISTINCT FROM NULL + + f (NULLではなく) @@ -422,15 +588,24 @@ repeat('Pg', 4) PgPgPgPgboolean + +NULLを比較可能な値とした上で、等しい。 1 IS NOT DISTINCT FROM NULL + + f (NULLではなく) NULL IS NOT DISTINCT FROM NULL + + t (NULLではなく) @@ -440,7 +615,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +値がNULLかどうか検査する。 1.5 IS NULL @@ -454,7 +632,10 @@ repeat('Pg', 4) PgPgPgPg boolean + +値がNULLではないかどうか検査する。 'null' IS NOT NULL @@ -468,7 +649,10 @@ repeat('Pg', 4) PgPgPgPg boolean + +値がNULLかどうか検査する。(非標準構文) @@ -478,7 +662,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +値がNULLではないかどうか検査する。(非標準構文) @@ -488,7 +675,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +論理式の結果が真となるかどうか検査する。 true IS TRUE @@ -496,7 +686,10 @@ repeat('Pg', 4) PgPgPgPg NULL::boolean IS TRUE + + f (NULLではなく) @@ -506,7 +699,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +論理式の結果が偽または不明となるかどうか検査する。 true IS NOT TRUE @@ -514,7 +710,10 @@ repeat('Pg', 4) PgPgPgPg NULL::boolean IS NOT TRUE + + t (NULLではなく) @@ -524,7 +723,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +論理式の結果が偽となるかどうか検査する。 true IS FALSE @@ -532,7 +734,10 @@ repeat('Pg', 4) PgPgPgPg NULL::boolean IS FALSE + + f (NULLではなく) @@ -542,7 +747,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +論理式の結果が真または不明となるかどうか検査する。 true IS NOT FALSE @@ -550,7 +758,10 @@ repeat('Pg', 4) PgPgPgPg NULL::boolean IS NOT FALSE + + t (NULLではなく) @@ -560,7 +771,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +論理式の結果が不明となるかどうか検査する。 true IS UNKNOWN @@ -568,7 +782,10 @@ repeat('Pg', 4) PgPgPgPg NULL::boolean IS UNKNOWN + + t (NULLではなく) @@ -578,7 +795,10 @@ repeat('Pg', 4) PgPgPgPgboolean + +論理式の結果が真または偽となるかどうか検査する。 true IS NOT UNKNOWN @@ -586,7 +806,10 @@ repeat('Pg', 4) PgPgPgPg NULL::boolean IS NOT UNKNOWN + + f (NULLではなく) @@ -600,14 +823,22 @@ repeat('Pg', 4) PgPgPgPg BETWEEN SYMMETRIC + +BETWEEN述語は範囲の検査を次のように単純にします。 a BETWEEN x AND y + +は a >= x AND a <= y +と同じです。 + +BETWEENは範囲内に含まれるとして端点値を扱うことに注意してください。 +BETWEEN SYMMETRICは、ANDの左側の引数が右側の引数より小さいか、もしくは等しいという必要性が無い点を除きBETWEENと同様です。 +この条件を満たしていない場合、2つの引数は自動的に交換されますので、常に空ではない範囲となります。 + +BETWEENの変種は通常の比較演算子を使って実装されており、比較可能なすべてのデータ型に対して使用できます。 + +BETWEEN構文中でANDを使用すると、ANDを論理演算子として使うこととの曖昧さが生じます。 +これを解決するために、BETWEEN句の第2引数としては限定された式の種類のみが利用できます。 +BETWEEN中で複雑な副式を使用する必要がある場合は、副式を括弧で囲んでください。 @@ -642,15 +885,21 @@ repeat('Pg', 4) PgPgPgPg IS NOT DISTINCT FROM + +入力のどちらかがNULLの場合、通常の比較演算子は真や偽ではなく(不明を意味する)nullを生成します。 +例えば7 = NULLはnullになります。7 <> NULLも同様です。 +この動作が適切でない場合は、IS NOT DISTINCT FROM述語を使用してください。 a IS DISTINCT FROM b a IS NOT DISTINCT FROM b + +非NULLの入力では、IS DISTINCT FROM<>演算子と同じです。 +しかし、入力がどちらもNULLの場合、これは偽を返し、片方の入力のみがNULLの場合は真を返します。 +同様に、IS NOT DISTINCT FROMは非NULL入力では=と同じですが、両方の入力がNULLであれば真を、片方のみがNULLの場合は偽を返します。 +このように、これらの述語はNULLを不明な値ではなく、通常の値かのように動作します。 @@ -674,29 +928,41 @@ repeat('Pg', 4) PgPgPgPg NOTNULL + +値がNULLかNULLでないかを検証するには次の述語を使います。 expression IS NULL expression IS NOT NULL + +あるいは、これと同等の、非標準の述語も使えます。 expression ISNULL expression NOTNULL null valuecomparing + NULL値比較 + +NULLNULLとは等しい関係にはありませんので、expression = NULLと記述してはいけません。 +(NULL値は不明の値を表しているため、不明な値同士が同じかどうかは識別できません。) + +アプリケーションによっては、expression = NULLが、expressionがNULL値と評価されるのであれば真を返すことを期待することがあります。 +これらのアプリケーションを標準SQLに準拠するように変更することを強くお勧めします。 +しかし、それができなければを使用することで対応することができます。 +これを有効にした場合、PostgreSQLx = NULL句をx IS NULLに変換します。 + +expressionが行値の場合、行式自体がNULLまたは、行のフィールドすべてがNULLの場合にIS NULLは真となります。 +一方IS NOT NULLは、行式自体が非NULLかつ、行のフィールドすべてが非NULLの場合に真となります。 +この動作により、IS NULLおよびIS NOT NULLは行値評価式に対し常に反対の結果を返すわけではありません。 +特に、NULLと非NULLの値の両方を含む行値式はどちらの試験でも偽を返します。 +たとえば、 SELECT ROW(1,2.5,'this is a test') = ROW(1, 3, 'not the same'); @@ -730,11 +1008,15 @@ SELECT ROW(table.*) IS NOT NULL FROM table; -- detect all-non-null rows SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in rows + +場合によっては、row IS DISTINCT FROM NULLあるいはrow IS NOT DISTINCT FROM NULLと記述する方が望ましいことがあるでしょう。 +これらは単に行全体の値がNULLかどうかを検査し、行のフィールドについての追加的検査を全く行わないからです。 @@ -756,7 +1038,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in IS NOT UNKNOWN + +論理値も次の述語で検証できます。 boolean_expression IS TRUE boolean_expression IS NOT TRUE @@ -765,6 +1050,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in boolean_expression IS UNKNOWN boolean_expression IS NOT UNKNOWN + +これらは、常に真か偽を返し、演算項目がNULLであってもNULL値を返すことはありません。 +NULL値が入力されると、不明という論理値として扱われます。 +IS UNKNOWNIS NOT UNKNOWNが、入力式が論理値型でなければならないという点を除き、それぞれ実質的にIS NULLIS NOT NULLと同じであることに注意してください。 + +に示すように、比較に関連した関数がいくつか使用可能です。
+ + 比較関数 + +関数 + +説明 + +例 @@ -806,7 +1111,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +非NULLの引数の数を返す。 num_nonnulls(1, NULL, 2) @@ -822,7 +1130,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +NULL引数の数を返す。 num_nulls(1, NULL, 2) @@ -836,17 +1147,25 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in + + 算術関数と演算子 + +PostgreSQLの数多くの型に対する算術演算子が用意されています。 +標準算術表現法が存在しない型(例えば、日付/時刻データ型)については、後続する節で実際の動作を説明します。 + +は標準の数値型で使用可能な算術演算子を示しています。 +特に説明がない限り、numeric_typeを受け付けると表示されている演算子はすべてのsmallintintegerbigintnumericrealdouble precisionデータ型で利用可能です。 +integral_typeを受け付けると表示されている演算子はすべてのsmallintintegerbigintデータ型で利用可能です。 +特に説明がない限り、それぞれの演算子は引数と同じデータ型を返します。 +integer + numericのように、複数の引数データ型が使われる呼び出しは、このリストの後で現れる型を使って解決されます。
+ + 算術演算子 + +演算子 + +説明 + +例 @@ -888,7 +1225,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +和 2 + 3 @@ -902,7 +1242,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +単項和(演算なし) + 3.5 @@ -916,7 +1259,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +差 2 - 3 @@ -930,7 +1276,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +否定 - (-4) @@ -944,7 +1293,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +積 2 * 3 @@ -958,8 +1310,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +商(整数型では、除算によってゼロへ余りが切り捨てられます) 5.0 / 2 @@ -981,8 +1336,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +剰余(余り)。smallintintegerbigintnumericで利用可能 5 % 4 @@ -1000,15 +1358,21 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +累乗 2 ^ 3 8 + +典型的な数学的用法とは違って、デフォルトでは^は左から右に適用されます。 2 ^ 3 ^ 3 @@ -1026,7 +1390,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +平方根 |/ 25.0 @@ -1040,7 +1407,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +立方根 ||/ 64.0 @@ -1054,7 +1424,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +絶対値 @ -5.0 @@ -1068,7 +1441,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integral_type + +ビットごとのAND 91 & 15 @@ -1082,7 +1458,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integral_type + +ビットごとのOR 32 | 3 @@ -1096,7 +1475,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integral_type + +ビットごとの排他的論理和 17 # 5 @@ -1110,7 +1492,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integral_type + +ビットごとのNOT ~1 @@ -1124,7 +1509,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integral_type + +ビットごとの左シフト 1 << 4 @@ -1138,7 +1526,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integral_type + +ビットごとの右シフト 8 >> 2 @@ -1151,6 +1542,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in
+ +に使用可能な算術関数を示します。 +これら関数の多くは、異なる引数型を持つ複数の形で提供されています。 +特に記述がある場合を除き、すべての形式の関数はその引数と同じデータ型を返します。 +複数の型をまたがる場合は上記の演算子のところで説明したのと同じ方法で解決されます。 +double precisionデータに対する関数のほとんどはホストシステムのCライブラリの上層に実装されています。このため、精度と境界近くの場合の振舞いはホストシステムに依存して変わります。 + + 算術関数 + +関数 + +説明 + +例 @@ -1190,7 +1600,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +絶対値 abs(-17.4) @@ -1207,7 +1620,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +立方根 cbrt(64.0) @@ -1228,7 +1644,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +引数より大きいか等しく、引数に最も近い整数 ceil(42.2) @@ -1253,8 +1672,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +引数より大きいか等しく、引数に最も近い整数(ceilと同じ) ceiling(95.3) @@ -1271,7 +1693,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +ラディアンを度に変換 degrees(0.5) @@ -1289,8 +1714,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +y/xの整数商 +(0に向かって切り捨て) div(9, 4) @@ -1307,7 +1736,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +誤差関数 erf(1.0) @@ -1324,8 +1756,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +相補誤差関数(1-erf(x)、大きな入力における精度の損失なし) erfc(1.0) @@ -1346,7 +1781,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +指数(eを底とする指定のべき乗) exp(1.0) @@ -1363,7 +1801,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +階乗 factorial(5) @@ -1384,7 +1825,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +引数より小さいか等しく、引数に最も近い整数 floor(42.8) @@ -1405,7 +1849,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +ガンマ関数 gamma(0.5) @@ -1426,10 +1873,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +最大公約数(余りなく入力を割る最大の正の整数)。 +両方の入力が0なら0を返す。 +integerbigintnumericで利用可能 gcd(1071, 462) @@ -1446,10 +1898,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +最小公倍数(両方の入力の整数倍となる最小の厳密な正の数)。 +両方の入力が0なら0を返す。 +integerbigintnumericで利用可能 lcm(1071, 462) @@ -1466,7 +1923,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +ガンマ関数の絶対値の自然対数 lgamma(1000) @@ -1487,7 +1947,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +自然対数 ln(2.0) @@ -1508,7 +1971,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +10を底とした対数 log(100) @@ -1529,7 +1995,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +10を底とした対数(logと同じ) log10(1000) @@ -1544,7 +2013,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +bを底としたxの対数 log(2.0, 64.0) @@ -1561,8 +2033,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +与えられた値を正確に表現するのに必要な最小の桁数(小数点以下の10進の桁数) min_scale(8.4100) @@ -1580,9 +2055,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric_type + +y/xの剰余。 +smallintintegerbigintnumericで利用可能 mod(9, 4) @@ -1599,7 +2078,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +πの近似値 pi() @@ -1622,7 +2104,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + + ab power(9, 3) @@ -1639,7 +2124,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +度をラディアンに変換 radians(45.0) @@ -1660,10 +2148,16 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +最も近い整数へ丸めます。 +numericの場合、小数点以下を四捨五入します。 +double precisionでは端数処理の振る舞いはプラットフォーム依存です。 +しかし、最も普通の規則は最近接偶数への丸め(round to nearest even)です。 round(42.4) @@ -1677,8 +2171,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +vを小数点第s位まで丸めます。 +小数点以下を切り上げて端数を処理します。 round(42.4382, 2) @@ -1699,7 +2197,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +引数の位取り(小数点以下の10進の桁数) scale(8.4100) @@ -1720,7 +2221,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +引数の符号(-1, 0,あるいは +1) sign(-8.4) @@ -1741,7 +2245,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +平方根 sqrt(2) @@ -1758,8 +2265,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +後方のゼロを削除することにより値の桁数(小数点以下の10進桁数)を減じる trim_scale(8.4100) @@ -1780,7 +2290,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +整数へ切り捨て(ゼロに向かって) trunc(42.8) @@ -1798,8 +2311,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +vを小数点以下s桁で切り捨て trunc(42.4382, 2) @@ -1820,6 +2336,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +lowからhighまでの範囲に広がる等幅でバケット数countのヒストグラムにおいて、operandが割り当てられるバケット番号を返す。 +バケットには、包含的な下限と排他的な上限があります。 +入力がlowより小さい場合は0を返し、入力がhigh以上の場合はcount+1を返します。 +low>highなら、振る舞いは鏡に写したように逆になり、バケット1lowのすぐ下になり、包含的な境界が上側になります。 width_bucket(5.35, 0.024, 10.06, 5) @@ -1850,6 +2372,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +包含的なバケットの最小値を示す配列が与えられた時に、operandが割り当てられるバケット番号を返す。 +最初の下限値よりも小さい入力値に対しては0を返します。 +operandと配列要素は標準の比較演算子を持つ型であればどのような型でも構いません。 +thresholds配列はソートされていなければならず、小さいものが最初です。 +さもなければ予想外の結果となるでしょう。 width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[]) @@ -1870,24 +2399,39 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in
+ +に乱数を生成する関数を示します。 + + 乱数関数 + +関数 + +説明 + +例 @@ -1902,7 +2446,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +0.0 <= x < 1.0の範囲の乱数値を返す random() @@ -1927,11 +2474,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in numeric + +min <= x max の範囲の乱数を返します。 +型がnumericの場合、結果はmin またはmax のいずれか大きい方と同じ小数桁数の小数部を持ちます。 random(1, 10) @@ -1955,9 +2506,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +指定されたパラメータを使用した標準偏差での乱数値を返します。 +meanのデフォルト値は0.0、stddevのデフォルト値は1.0です。 random_normal(0.0, 1.0) @@ -1974,9 +2529,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in void + +今後のrandom()random_normal()呼び出しで使用されるシード(種)を設定します。引数は-1.0から1.0までの境界を含む値でなければなりません。 setseed(0.12345) @@ -1987,6 +2545,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in
+ +にリストされているrandom()random_normal()関数は、決定論的な擬似乱数生成器を使用しています。 +高速ですが、暗号用途には適していません。より安全な代替手段についてはモジュールを参照してください。 +setseed()が呼び出されると、現在のセッション内での以後の一連のこれらの関数の呼び出し結果はsetseed()を同じ引数で再実行することによって再現可能となります。 +同じセッション内でsetseed()をそれ以前に呼び出していない場合は、これらの関数のいずれかの最初の呼び出しによってプラットフォーム依存の乱数ビットのソースからシードを入手します。 + +使用可能な三角関数をに示します。 +それぞれの三角関数には、角度の単位をラディアンにするものと度にするものの2種類があります。 + + 三角関数 + +関数 + +説明 + +例 @@ -2037,7 +2617,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆余弦関数、結果はラディアン acos(1) @@ -2054,7 +2637,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆余弦関数、結果は度 acosd(0.5) @@ -2071,7 +2657,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆正弦関数、結果はラディアン asin(1) @@ -2088,7 +2677,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆正弦関数、結果は度 asind(0.5) @@ -2105,7 +2697,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆正接関数、結果はラディアン atan(1) @@ -2122,7 +2717,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆正接関数、結果は度 atand(1) @@ -2140,9 +2738,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +y/xの逆正接関数、結果はラディアン atan2(1, 0) @@ -2160,9 +2761,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +y/xの逆正接関数、結果は度 atan2d(1, 0) @@ -2179,7 +2783,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +余弦関数、引数はラディアン cos(0) @@ -2196,7 +2803,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +余弦関数、引数は度 cosd(60) @@ -2213,7 +2823,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +余接関数、引数はラディアン cot(0.5) @@ -2230,7 +2843,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +余接関数、引数は度 cotd(45) @@ -2247,7 +2863,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +正弦関数、結果はラディアン sin(1) @@ -2264,7 +2883,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +正弦関数、結果は度 sind(30) @@ -2281,7 +2903,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +正接関数、引数はラディアン tan(1) @@ -2298,7 +2923,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +正接関数、引数は度 tand(45) @@ -2311,34 +2939,53 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in + +度単位の角度を扱う別の方法は、前に示した単位変換関数radians()degrees()を使うことです。 +しかし、角度を使う方法の方が、sind(30)のような特別な場合の丸め誤差を避けられるため、推奨されます。 + +に利用可能な双曲線関数を示します。
+ + 双曲線関数 + +関数 + +説明 + +例 @@ -2353,7 +3000,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +双曲線正弦 sinh(1) @@ -2370,7 +3020,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +双曲線余弦 cosh(0) @@ -2387,7 +3040,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +双曲線正接 tanh(1) @@ -2404,7 +3060,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆双曲線正弦 asinh(1) @@ -2421,7 +3080,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆双曲線余弦 acosh(1) @@ -2438,7 +3100,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in double precision + +逆双曲線正接 atanh(0.5) @@ -2453,9 +3118,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in + + 文字列関数と演算子 + +本節では文字列の値の調査や操作のための関数と演算子について説明します。 +ここでの文字列とはcharacterデータ型、character varyingデータ型、およびtextデータ型の値を含みます。 +補足説明のない限り、下記に挙げている全ての関数はtext型を受付、また戻り値型として返すように宣言されています。 +それらはcharacter varyingデータ型も同じように受け付けます。 +character型の値は関数あるいは演算子に適用される前にtextに変換され、character値の末尾の空白が削除されることになります。 + +SQLでは引数の区切りにカンマではなくキーワードを使用する文字列関数をいくつか定義しています。 +詳細についてはを参照してください。 +またPostgreSQLは、これらの関数に対して通常の関数呼び出し構文を使用するバージョンを提供します(を参照してください)。 + +文字列連結演算子(||)はで示されるように、少なくともひとつの入力が文字列型であれば、依然として非文字列入力を受け付けます。 +その他の場合には非文字列入力を受け付けるために、textへの明示的な変換を行うことが可能です。
+ + <acronym>SQL</acronym>文字列関数と演算子 + +関数/演算子 + +説明 + +例 @@ -2511,11 +3207,18 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in character stringconcatenation + + 文字列 + 結合 + text||texttext + +2つの文字列を結合します。 'Post' || 'greSQL' @@ -2533,11 +3236,16 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +非文字列の入力をテキストに変換したのちに2つの文字列を結合します。 +(非文字列の入力は配列型であってはいけません。配列の||演算子との間で曖昧性が生じるからです。 +配列のテキストあるいは類似のものを結合する場合は明示的にtextにキャストしてください。) 'Value: ' || 42 @@ -2555,9 +3263,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringからcharacters(空白一文字がデフォルト)に現れる文字のみを含む最長の文字列を先頭と末尾から取り除きます。 btrim('xyxtrimyyx', 'xyz') @@ -2577,6 +3288,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in boolean + +文字列が指定したUnicode正規形の範囲かどうかをチェックします。 +オプションのformキーワードは正規形を指定します。NFC (デフォルトです)、NFDNFKCあるいはNFKDです。 +この式はサーバエンコーディングがUTF8のときだけ使用できます。 +この式を用いた正規形のチェックは、しばしばすでに正規化されている可能性のある文字列を正規化するよりも高速であることに注意してください。 U&'\0061\0308bc' IS NFD NORMALIZED @@ -2600,8 +3317,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +文字列中のビット数を返します(octet_lengthの8倍です。) bit_length('jose') @@ -2618,11 +3338,20 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in character string length + + 文字列 + 長さ + length of a character string character string, length + + 長さ + 文字列の + 文字列, 長さ + char_length ( text ) integer @@ -2634,7 +3363,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +文字列中の文字数を返します。 char_length('josé') @@ -2651,8 +3383,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +データベースのロケールのルールに従い、文字列をすべて小文字に変換します。 lower('TOM') @@ -2671,11 +3406,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +文字fill(デフォルトは空白文字)を文字列の前に追加して、stringlengthの長さにします。 +stringが既にlengthの長さを超えている場合は(右側が)切り捨てられます。 lpad('hi', 5, 'xy') @@ -2693,9 +3432,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringからcharacters(空白一文字がデフォルト)に現れる文字のみを含む最長の文字列を先頭から取り除きます。 ltrim('zzzytest', 'xyz') @@ -2716,12 +3458,17 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +文字列を指定したUnicode正規形に変換します。 +オプションのformキーワードは正規形を指定します。NFC (デフォルトです)、NFDNFKCあるいはNFKDです。 +この式はサーバエンコーディングがUTF8のときだけ使用できます。 normalize(U&'\0061\0308bc', NFC) @@ -2738,11 +3485,17 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +文字列のバイト数を返します。 octet_length('josé') + +5(サーバエンコーディングがUTF8の場合) @@ -2755,9 +3508,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +文字列のバイト数を返します。 +このバージョンの関数は直接character型を受け付けるので、末尾の空白を削除しません。 octet_length('abc '::character(4)) @@ -2774,12 +3531,16 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringstart文字目からcount文字をnewsubstringで置き換えます。 +countを省略するとnewsubstringの長さがデフォルトになります。 overlay('Txxxxas' placing 'hom' from 2 for 4) @@ -2796,9 +3557,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +string中のsubstringで指定する文字列の最初の開始位置を返します。0ならその文字列は存在しません。 position('om' in 'Thomas') @@ -2817,11 +3581,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +文字fill(デフォルトは空白文字)を文字列に追加して、stringlengthの長さにします。 +stringが既にlengthの長さを超えている場合は切り捨てられます。 rpad('hi', 5, 'xy') @@ -2839,9 +3607,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringからcharacters(空白一文字がデフォルト)に現れる文字のみを含む最長の文字列を末尾から取り除きます。 rtrim('testxxzx', 'xyz') @@ -2858,11 +3629,16 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +startが指定されていればstart番目の文字で始まるstringの部分文字列を返します。 +countが指定されていればcount数の文字を取り出します。 +少なくともstartcountのどちらかを指定してください。 substring('Thomas' from 2 for 3) @@ -2884,8 +3660,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +POSIX正規表現にマッチする最初の部分文字列を返します。を参照してください。 substring('Thomas' from '...$') @@ -2903,10 +3682,14 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +SQL正規表現にマッチする最初の部分文字列を返します。を参照してください。 +最初の形式はSQL:2003以降で指定されています。2番目の形式はSQL:1999でのみ指定されており、廃れていると考えるべきでしょう。 substring('Thomas' similar '%#"o_a#"_' escape '#') @@ -2925,10 +3708,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringからcharacters(空白一文字がデフォルト)に現れる文字のみを含む最長の文字列を先頭、末尾、あるいはその両方(BOTHがデフォルト)から取り除きます。 trim(both 'xyz' from 'yxTomxx') @@ -2944,7 +3730,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +これはtrim()の非標準構文です。 trim(both from 'yxTomxx', 'xyz') @@ -2961,10 +3750,14 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in boolean + +文字列中のすべての文字がUnicodeコードポイントに割り当てられている場合はtrueを返し、そうでない場合はfalseを返します。 +この関数はサーバのエンコーディングがUTF8の場合にのみ使用できます。 @@ -2977,8 +3770,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +データベースのロケールのルールに従い、文字列をすべて大文字に変換します。 upper('tom') @@ -2990,6 +3786,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in
+ +この他、に列挙する文字列操作関数と演算子が使えます。 +(そのいくつかは、で列挙した標準SQLの文字列関数を実装するため、内部的に使用されます。) +また、で説明するしたパターンマッチ演算子と、で説明する全文検索用の演算子もあります。 + + その他の文字列操作関数と演算子 + +関数/演算子 + +説明 + +例 @@ -3024,12 +3837,19 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in character stringprefix test + + 文字列 + 接頭辞テスト + text^@textboolean + +最初の文字列が2番目の文字列で始まる場合に真を返します(starts_with()関数と同じです)。 'alphabet' ^@ 'alph' @@ -3046,10 +3866,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +引数の最初の文字の数値コードを返します。 +UTF8符号化方式ではその文字のUnicodeコードポイントを返します。 +その他のマルチバイト符号化方式の場合、引数はASCII文字でなくてはなりません。 ascii('x') @@ -3066,11 +3891,17 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +与えられたコードの文字を返します。 +UTF8符号化方式では、引数はUnicodeコードポイントと見なされます。 +その他のマルチバイト符号化方式の場合、引数は指定のASCII文字でなくてはなりません。 +chr(0)は禁止されています。テキストデータ型はその文字を格納できないからです。 chr(65) @@ -3088,8 +3919,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +引数をテキスト形式にしたものを結合します。 +NULL引数は無視されます。 concat('abcde', 2, NULL, 22) @@ -3108,9 +3943,14 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +最初の引数以外をセパレータとともに結合します。 +最初の引数はセパレータ文字列として使われ、NULLにすべきではありません。 +それ以外のNULLの引数は無視されます。 concat_ws(',', 'abcde', 2, NULL, 22) @@ -3128,9 +3968,14 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +引数の書式をフォーマット文字列に従って整形します。 +を参照してください。 +この関数はC言語関数のsprintfと似ています。 format('Hello %s, %1$s', 'World') @@ -3147,9 +3992,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +それぞれの単語の第一文字を大文字に、残りは小文字に変換します。 +ここで単語とは、英数字以外の文字で区切られた、英数字からなる文字の並びのことです。 initcap('hi THOMAS') @@ -3166,32 +4015,53 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +照合順序に従い、入力文字列の大文字小文字変換(case folding)を行います。 +casefoldによる大文字小文字変換は、lowerやupperなどによる大文字小文字変換と似ています。 +ただし、後者の変換の目的は大文字と小文字を区別した特定の形式に変換することであるのに対し、前者の変換の目的は大文字と小文字を区別しない文字列のマッチングを容易にすることです。 +この関数は、サーバ符号化方式がUTF8の場合にのみ使用できます。 + +通常は単純に小文字に変換しますが、照合順序によっては例外があります。 +例えば、一部の文字には小文字の種類が3つ以上ある場合や、大文字に変換する場合があります。 + +この変換により文字列の長さが変わることがあります。 +例えば、照合順序PG_UNICODE_FASTでは、ß(U+00DF)をssに変換します。 + +casefoldは、Unicodeのデフォルトの大文字小文字を区別しないマッチングに使用できます。 +入力文字列の正規化された形式を常に保持するわけではありません(を参照してください)。 + +libcプロバイダはこの大文字小文字変換をサポートしていないので、casefoldと同じです。 @@ -3205,9 +4075,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +文字列の先頭からn文字を返します。 +nが負数の場合、文字列の末尾から|n|文字を切り取った文字列を返します。 left('abcde', 2) @@ -3224,7 +4098,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +文字列内の文字数を返します。 length('jose') @@ -3241,8 +4118,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +引数のMD5ハッシュ計算し、16進数で結果を返します。 md5('abc') @@ -3260,6 +4140,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text[] + +qualified_identifierを識別子の配列に分割し、個々の識別子に引用符があればそれを削除します。 +デフォルトでは、最後の識別子の後に続く余分な文字はエラーとされますが、2番目のパラメータがfalseの場合は、そのような余分な文字は無視されます。 +(この動作は、関数のようなオブジェクトに対して名前を解析するときに便利でしょう。) +この関数は、長すぎる識別子を切り詰めないことに注意してください。 +切り詰めが必要なときは、その結果をname[]にキャストすることができます。 parse_ident('"SomeSchema".someTable') @@ -3284,7 +4171,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in name + +現在のクライアントの符号化方式の名前を返します。 pg_client_encoding() @@ -3301,12 +4191,18 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +与えられた文字列を、SQL問い合わせ文字列で識別子として使用できるように、適切な引用符を付けて返します。 +引用符は、必要な場合(すなわち、文字列に識別子として使用できない文字が含まれる場合や、大文字変換される場合)にのみ追加されます。 +埋め込まれた引用符は、適切に二重化されます。 +も参照してください。 quote_ident('Foo bar') @@ -3323,6 +4219,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +与えられた文字列を、SQL問い合わせ文字列で文字リテラルとして使用できるように、適切な引用符を付けて返します。 +埋め込まれた単一引用符およびバックスラッシュは、適切に二重化されます。 +quote_literalはNULL入力に対してNULLを返すことに注意してください。引数がNULLとなる可能性がある場合、よりquote_nullableの方がしばしば適しています。 +も参照してください。 quote_literal(E'O\'Reilly') @@ -3343,8 +4245,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +与えられた値をテキストに変換し、そしてリテラルとして引用符付けします。 +埋め込まれた単一引用符とバックスラッシュは適切に二重化されます。 quote_literal(42.5) @@ -3361,11 +4267,17 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +与えられた文字列を、SQL問い合わせ文字列で文字列リテラルとして使用できるように、適切な引用符を付けて返します。 +また、引数がNULLの場合、NULLを返します。 +埋め込まれた単一引用符およびバックスラッシュは適切に二重化されます。 +も参照してください。 quote_nullable(NULL) @@ -3379,9 +4291,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +与えられた値をテキストに変換し、そしてリテラルとして引用符付けします。引数がNULLの場合はNULLを返します。 +埋め込まれた単一引用符とバックスラッシュは適切に二重化されます。 quote_nullable(42.5) @@ -3400,10 +4316,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +stringに対してPOSIX正規表現patternがマッチした回数を返します。を参照してください。 regexp_count('123456789012', '\d\d\d', 2) @@ -3425,10 +4344,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +POSIX正規表現patternN番目の一致が発生するstring内の位置を返します。一致がない場合は0を返します。を参照してください。 regexp_instr('ABCDEF', 'c(.)(..)', 1, 1, 0, 'i') @@ -3450,10 +4372,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in boolean + +POSIX正規表現patternの一致がstring内にあるかどうかをチェックします。を参照してください。 regexp_like('Hello World', 'world$', 'i') @@ -3470,10 +4395,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text[] + +stringに対してPOSIX正規表現patternで最初にマッチした部分文字列を返します。より詳細はを参照してください。 regexp_match('foobarbequebaz', '(bar)(beque)') @@ -3490,11 +4418,14 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in setof text[] + +stringに対してPOSIX正規表現patternで最初にマッチした部分文字列、あるいはgフラグが設定されている場合には、一致したすべての部分文字列を返します。より詳細はを参照してください。 regexp_matches('foobarbequebaz', 'ba.', 'g') @@ -3516,10 +4447,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringに対してPOSIX正規表現patternで最初の一致、あるいはgが指定された場合にはすべての一致の結果部分文字列を返します。を参照してください。 regexp_replace('Thomas', '.[mN]a.', 'M') @@ -3536,6 +4470,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringstart番目の文字から検索を始めて、POSIX正規表現patternN番目に一致する部分文字列、またはNが0の場合は一致するすべての部分文字列を置換します。 +Nを省略すると、デフォルトで1になります。 +を参照してください。 regexp_replace('Thomas', '.', 'X', 3, 2) @@ -3563,9 +4502,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text[] + +POSIX正規表現を区切り文字に使ってstringを分割し、結果の配列を生成します。 +を参照してください。 regexp_split_to_array('hello world', '\s+') @@ -3582,9 +4525,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in setof text + +POSIX正規表現を区切り文字に使ってstringを分割します。 +詳しくはを参照してください。 regexp_split_to_table('hello world', '\s+') @@ -3609,11 +4556,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +POSIX正規表現patternN番目に一致するstring内の部分文字列を返します。一致しない場合はNULLを返します。 +を参照してください。 regexp_substr('ABCDEF', 'c(.)(..)', 1, 1, 'i') @@ -3634,8 +4585,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +指定されたnumberの数だけstringを繰り返します。 repeat('Pg', 4) @@ -3654,9 +4608,12 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringに出現する全てのfrom部分文字列をto部分文字列に置換します。 replace('abcdefabcdef', 'cd', 'XX') @@ -3673,7 +4630,10 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +文字列中の文字を逆順にします。 reverse('abcde') @@ -3691,9 +4651,13 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +文字列の末尾からn文字を返します。 +nが負数の場合は、文字列の先頭から|n|文字だけ切り取った文字列を返します。 right('abcde', 2) @@ -3712,11 +4676,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringdelimiterで分割し、その結果からn番目のフィールド(1から始まるように数える)を返します。 +nが負なら最後から|n|番目のフィールドを返します。 split_part('abc~@~def~@~ghi', '~@~', 2) @@ -3737,8 +4705,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in boolean + +stringprefixで始まっていれば真を返します。 starts_with('alphabet', 'alph') @@ -3755,6 +4726,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text[] + +stringdelimiterで区切り、結果のフィールドをtext配列に格納します。 +delimiterNULLなら、stringの各文字が配列の別々の要素になります。 +delimiterが空文字なら、stringは単一のフィールドとして扱われます。 +null_stringが指定され、NULLでなければ、その文字列にマッチするフィールドはNULLで置き換えられます。 +array_to_stringも参照してください。 string_to_array('xx~~yy~~zz', '~~', 'yy') @@ -3783,6 +4761,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in setof text + +stringdelimiterで区切り、結果のフィールドをtextの行集合として返します。 +delimiterNULLなら、結果はstringの各文字が別々の行になります。 +delimiterが空文字なら、stringは単一のフィールドとして扱われます。 +null_stringが指定され、NULLでなければ、その文字列にマッチするフィールドはNULLで置き換えられます。 string_to_table('xx~^~yy~^~zz', '~^~', 'yy') @@ -3815,11 +4799,15 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in integer + +string中の指定したsubstringの最初の開始位置を返します。substringが存在しなければゼロを返します。 +(position(substring in string)と同じですが、引数の順序が逆であることに注意してください。) strpos('high', 'ig') @@ -3836,6 +4824,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringstart番目の文字から始まり、指定されている場合はcount文字だけ連続したが部分文字列を取り出します。 +(substring(string from from for count)と同じです。) substr('alphabet', 3) @@ -3873,6 +4865,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +stringを他の名前あるいは数で指定される符号化方式から、ASCIIに変換します。 +encodingが省略されるとデータベースの符号化方式を指定したと見なします(これは実用的には唯一有用なケースです。) +この変換は主にアクセントを削除するのが目的です。 +LATIN1LATIN2LATIN9WIN1250符号化方式からの変換のみをサポートします。 +(他のより柔軟な解決方法としては、モジュールを参照してください。) to_ascii('Karél') @@ -3903,8 +4902,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +数を2の補数で表す同等の2進数表現に変換します。 to_bin(2147483647) @@ -3929,8 +4931,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +数を2の補数で表す同等の16進数表現に変換します。 to_hex(2147483647) @@ -3955,8 +4960,11 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +数を2の補数で表す同等の8進数表現に変換します。 to_oct(2147483647) @@ -3979,12 +4987,16 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +from集合内の文字と一致するstringにある全ての文字は、to集合内のそれに対応する文字に置き換えられます。 +もしfromtoより長い場合、fromで指定される余分な文字に一致するものは削除されます。 translate('12345', '143', 'ax') @@ -4001,6 +5013,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in text + +引数のエスケープされたUnicode文字を評価します。 +Unicode文字は、\XXXX (16進4桁)、\+XXXXXX (16進6桁)、\uXXXX (16進4桁)、\UXXXXXXXX(16進8桁)で指定できます。 +バックスラッシュを指定するには、2つのバックスラッシュを書きます。 +それ以外の文字はそのまま扱われます。 + +サーバのエンコーディングがUTF-8でなければ、これらのエスケープシーケンスで指定されるUnicodeコードポイントがサーバの実際のエンコーディングに変換されます。 +変換不可能ならばエラーが報告されます。 + +この関数はUnicodeエスケープシーケンス(参照)に対する(非標準の)代替を提供します。 @@ -4039,6 +5064,7 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in
+ +concatconcat_wsおよびformat関数はVariadicです。従って、キーワードVARIADICで標しをつけられた配列のように、値を連結またはフォーマットした形で受け渡すことが可能です(を参照してください)。 +配列の要素は関数に対して分割された通常の引数のように扱われます。 +もしvariadic配列引数がNULLであれば、concatおよびconcat_wsはNULLを返しますが、formatはNULLを要素を持たない配列と扱います。 + +内のstring_agg集約関数と、文字列とbytea型を変換するための内の関数も参照してください。 @@ -4065,15 +5098,19 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in + +関数formatは、C関数のsprintf同様の形式で、フォーマット文字列に従ってフォーマットされた出力を生成します。 format(formatstr text , formatarg "any" , ... ) + +formatstrは結果がどのようにフォーマットされるかを指定するフォーマット文字列です。 +フォーマット指示子が使用されている箇所を除き、フォーマット文字列のテキストは結果に直接コピーされます。 +フォーマット指示子は文字列中のプレースホルダとして振舞い、その後に引き続く関数引数がどのようにフォーマットされ、どのように結果に挿入されるかを定義します。 +それぞれのformatarg引数はそのデータ型に対する通常の出力規定に従ってテキストに変換され、その後フォーマット指示子に従って、結果文字列に挿入されます。 + +フォーマット指示子は%文字で始まり、以下の形式をとります。 %[position][flags][width]type + +ここで要素フィールドとは以下になっています。 + + position (省略可能) + +n$の形式の文字列で、nは出力する引数のインデックスです。 +インデックス1はformatstrの後の最初の引数です。 +positionが省略されると、一連の中の次の引数がデフォルトとして使用されます。 + + flags (省略可能) + +フォーマット指示子の出力がどのようにフォーマットされるかを制御する追加の任意の要素です。 +現在、サポートされているflagはマイナス記号(-)のみで、フォーマット指示子の出力が左詰めになるようにします。 +これはwidthフィールドが同時に指定されていない場合は効果がありません。 + + width (省略可能) + +フォーマット指示子の出力を表示する最小文字数を指定します。 +出力は、幅を満たすのに必要な空白が左または右(flagの-による)に埋め込まれます。 +幅が小さすぎても出力が切り詰められることはなく、単に無視されます。 +幅は次のいずれかでも指定できます。それらは、正の整数、幅としての次の関数引数として使用する星印 (*)、またはn番目の関数引数を幅として使用する*n$という形式の文字列です。 + +幅を関数引数から取得する場合、その引数はフォーマット指示子の値に使用される引数より先に消費されます。 +幅の引数が負の場合、フィールド長abs(width)の範囲内で結果は(あたかもflagで-が指定されたように)左詰めになります。 + + type (必須) + +フォーマット指示子の出力を生成するのに使用されるフォーマット変換の型。 +以下の型がサポートされています。 + +sは引数の値を単純文字列にフォーマットします。 +NULL値は空文字列として扱われます。 + +Iは、引数をSQLの識別子として取り扱い、必要ならそれを二重引用符で括ります。 +NULL値はエラーです(quote_identと同等です)。 + +Lは引数値をSQLリテラルとして引用符が付けられます。 +NULL値は引用符無しの文字列NULLとなります(quote_nullableと同等です)。 @@ -4180,12 +5276,18 @@ SELECT NOT(ROW(table.*) IS NOT NULL) FROM TABLE; -- detect at least one null in + +上記で説明したフォーマット指示子に加え、特別の並びの%%がリテラル%文字を出力するために使用することもできます。 + +基本的なフォーマット変換の例を幾つか下記に紹介します。 SELECT format('Hello %s', 'World'); @@ -4203,8 +5305,11 @@ SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files'); + +widthフィールドとflagの-を使用した例を以下に示します。 SELECT format('|%10s|', 'foo'); @@ -4228,7 +5333,10 @@ SELECT format('|%-*s|', -10, 'foo'); + +以下の例はpositionフィールドの使い方を示しています。 SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three'); @@ -4243,6 +5351,7 @@ SELECT format('|%1$*2$s|', 'foo', 10, 'bar'); + +標準C関数sprintfとは違って、PostgreSQLformat関数は、同一のフォーマット文字列の中でpositionフィールドがあるフォーマット指示子と、それがないフォーマット指示子の混在を許容します。 +positionフィールドが無いフォーマット指示子は常に最終の引数が消費された後に次の引数を使用します。 +さらに、format関数はフォーマット文字列で使用されるべき全ての関数引数を要求しません。 +例を示します。 SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); @@ -4260,9 +5374,13 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); + +%I および %Lのフォーマット指示子は特に動的SQL命令を安全に構築する場合に便利です。 +を参照してください。 @@ -4270,21 +5388,33 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); + + バイナリ文字列関数と演算子 binary data functions + + バイナリデータ + 関数 + + +本節ではバイナリ文字列、すなわちbytea型の値を調べたり操作するための関数と演算子について説明します。 +これらの多くは前節で説明されているテキスト文字列関数と、目的と構文という意味で同じです。 + +SQLでは、引数の区切りにカンマではなくキーワードを使う文字列関数を、いくつか定義しています。 +詳細はを参照してください。 +またPostgreSQLは、これらの関数に対して通常の関数呼び出し構文を使用するバージョンを提供します(を参照してください)。 + + <acronym>SQL</acronym>バイナリ文字列関数と演算子 + +関数/演算子 + +説明 + +例 @@ -4318,11 +5464,18 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); binary stringconcatenation + + バイナリ文字列 + 結合 + bytea||byteabytea + +2つのバイナリ文字列を結合します。 '\x123456'::bytea || '\x789a00bcde'::bytea @@ -4339,8 +5492,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); integer + +文字列中のビット数を返します(octet_lengthの8倍)。 bit_length('\x123456'::bytea) @@ -4358,9 +5514,12 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +bytesからbytesremovedに現れるバイトのみを含む最長の文字列を先頭と末尾から取り除きます。 btrim('\x1234567890'::bytea, '\x9012'::bytea) @@ -4378,9 +5537,12 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +bytesの先頭からbytesremovedに現れるバイトだけを含む最長の文字列を削除します。 ltrim('\x1234567890'::bytea, '\x9012'::bytea) @@ -4397,7 +5559,10 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); integer + +バイナリ文字列中のバイト数を返します。 octet_length('\x123456'::bytea) @@ -4414,12 +5579,16 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +bytesstart番目のバイトからcountバイトをnewsubstringで置き換えます。 +countを省略するとnewsubstringの長さがデフォルトになります。 overlay('\x1234567890'::bytea placing '\002\003'::bytea from 2 for 3) @@ -4436,9 +5605,12 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); integer + +bytes中のsubstringで指定する最初の文字列開始位置を返します。その文字列が存在しなければ0を返します。 position('\x5678'::bytea in '\x1234567890'::bytea) @@ -4456,9 +5628,12 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +bytesからbytesremovedに現れるバイトのみを含む最長の文字列を末尾から取り除きます。 rtrim('\x1234567890'::bytea, '\x9012'::bytea) @@ -4475,11 +5650,16 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +startが指定されていればstart番目の文字で始まるbytesの部分文字列を返します。 +countが指定されていればcount数の文字で停止します。 +少なくともstartcountのどちらかを指定してください。 substring('\x1234567890'::bytea from 3 for 2) @@ -4498,10 +5678,13 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +bytesからbytesremovedに現れるバイトのみを含む最長の文字列を先頭、末尾、あるいはその両方(BOTHがデフォルト)から取り除きます。 trim('\x9012'::bytea from '\x1234567890'::bytea) @@ -4517,7 +5700,10 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +これはtrim()の非標準構文です。 trim(both from '\x1234567890'::bytea, '\x9012'::bytea) @@ -4529,26 +5715,42 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
+ +この他、に列挙するバイナリ文字列操作関数が使えます。 +そのいくつかは、で列挙した標準SQLの文字列関数を実装するため、内部的に使用されます。 + + その他のバイナリ文字列関数 + +関数 + +説明 + +例 @@ -4567,8 +5769,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bigint + +バイナリ文字列中のセットされているビットの数を返します(popcountとしても知られています)。 bit_count('\x1234567890'::bytea) @@ -4585,7 +5790,10 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bigint + +バイナリ文字列のCRC-32値を計算します。 crc32('abc'::bytea) @@ -4602,7 +5810,10 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bigint + +バイナリ文字列のCRC-32C値を計算します。 crc32c('abc'::bytea) @@ -4620,8 +5831,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); integer + +バイナリ文字列のn番目のビットを取り出します。 get_bit('\x1234567890'::bytea, 30) @@ -4639,8 +5853,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); integer + +バイナリ文字列のn番目のバイトを取り出します。 get_byte('\x1234567890'::bytea, 4) @@ -4662,11 +5879,19 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); of a binary string binary strings, length + + 長さ + バイナリ文字列の + バイナリ文字列, 長さ + length ( bytea ) integer + +バイナリ文字列のバイト数を返します。 length('\x1234567890'::bytea) @@ -4681,8 +5906,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); integer + +与えられたencodingのテキストであると見なしてバイナリ文字列中の文字数を返します。 length('jose'::bytea, 'UTF8') @@ -4699,8 +5927,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); text + +バイナリ文字列のMD5ハッシュ計算し、16進数で結果を返します。 md5('Th\000omas'::bytea) @@ -4717,7 +5948,10 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のバイトの順序を反転します。 reverse('\xabcd'::bytea) @@ -4736,8 +5970,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のn番目のビットをnewvalueにします。 set_bit('\x1234567890'::bytea, 30, 0) @@ -4756,8 +5993,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のn番目のバイトをnewvalueにします。 set_byte('\x1234567890'::bytea, 4, 64) @@ -4774,8 +6014,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のSHA-224 ハッシュを計算します。 sha224('abc'::bytea) @@ -4792,8 +6035,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のSHA-256 ハッシュを計算します。 sha256('abc'::bytea) @@ -4810,8 +6056,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のSHA-384 ハッシュを計算します。 sha384('abc'::bytea) @@ -4828,8 +6077,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +バイナリ文字列のSHA-512 ハッシュを計算します。 sha512('abc'::bytea) @@ -4846,6 +6098,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +start番目の文字で始まるbytesの部分文字列を取り出します。 +countが指定されていればcount数バイトを取り出します。 +(substring(bytes from start for count)と同じです。) substr('\x1234567890'::bytea, 3, 2) @@ -4864,15 +6121,20 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
+ +get_byteset_byteはバイナリ文字列の先頭バイトを0バイトとして数えます。 +get_bitset_bitは各バイト内で右からビットを数えます。例えばビット0は先頭バイトの最下位ビットとなり、ビット15は第二バイトの最上位ビットとなります。 + +歴史的な理由により、md5は16進のエンコード値をtext型で返すのに対し、SHA-2関数はbyteaを返します。 +両者の間の変換を行うには、関数encodedecodeを使ってください。 +たとえば、16進のエンコードのテキスト表現を得るには、encode(sha256('abc'),'hex')byteaを得るにはdecode(md5('abc'), 'hex')としてください。 @@ -4889,10 +6155,19 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); character string converting to binary string + + 文字列 + バイナリ文字列への変換 + binary string converting to character string + + バイナリ文字列 + 文字列への変換 + + +異なる文字集合(文字符号化方式)間で文字列を変換する関数と、テキスト形式の任意のバイナリデータを表現する関数をで示します。 +引数あるいは結果のtext型はデータベースのデフォルト文字符号化方式で表現され、bytea型の引数あるいは結果は別の引数で指定する文字符号化方式名で表現されます。 + + テキスト/バイナリ文字列変換関数 + +関数 + +説明 + +例 @@ -4931,11 +6221,14 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +文字符号化方式src_encodingのバイナリ文字列で表現したテキストを文字符号化方式dest_encodingのバイナリ文字列に変換します。(利用可能な変換はを参照してください。) convert('text_in_utf8', 'UTF8', 'LATIN1') @@ -4953,11 +6246,14 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); text + +文字符号化方式src_encodingのバイナリ文字列で表現したテキストをデータベース文字符号化方式のテキストに変換します。(利用可能な変換はを参照してください。) convert_from('text_in_utf8', 'UTF8') @@ -4975,10 +6271,13 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +text文字列(データベース文字符号化方式で表現)を文字符号化方式dest_encodingのバイナリ文字列に変換します。(利用可能な変換はを参照してください。) convert_to('some_text', 'UTF8') @@ -4996,11 +6295,14 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); text + +バイナリデータをテキスト表現形式に符号化します。サポートされているformat値は、base64escapehexです。 encode('123\000\001', 'base64') @@ -5018,9 +6320,13 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); bytea + +テキスト表現からバイナリデータに復号します。 +format値はencodeと同じです。 decode('MTIzAAE=', 'base64') @@ -5032,8 +6338,11 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
+ +encodedecode関数は以下のテキスト形式をサポートしています。 @@ -5043,6 +6352,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); + +base64形式はRFC 2045 6.8節のものです。 +RFCに従い、符号化された行は76文字に分割されます。 +しかし、MIME CRLF行端指示子ではなくて単に改行が行端として使われます。 +decode関数はキャリッジ・リターン、改行、空白、タブ文字を無視します。 +行端パディング文字が不正な場合を含み、decodeに不正なbase64のデータが与えられるとエラーが生じます。 @@ -5063,6 +6379,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); + +escape形式はゼロバイトとハイビットがセットされたバイトを8進エスケープシーケンス(\nnn)に変換し、バックスラッシュを二重化します。 +他のバイト値は文字通りに表現されます。 +バックスラッシュの後が二番目のバックスラッシュあるいは3つの8進数のどちらでもなければ、decode関数はエラーを生じます。他のバイト値はそのまま受け付けます。 @@ -5081,6 +6402,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); + +hex形式はデータの各々の4ビットを、それぞれのバイトの上位桁を最初にして、0からfの16進数で表現します。 +encode関数はa-fの16進数を小文字で出力します。 +最小のデータ単位は8ビットなので、encodeが返す文字数は常に偶数です。 +decode関数はa-fの文字が大文字でも小文字でも受け付けます。 +decode関数は、奇数の文字数を含み、不正な16進データを与えられるとエラーが生じます。 @@ -5101,11 +6429,17 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); + +さらに、bytea型から整数値にキャストすることも整数値からbytea型にキャストすることも可能です。 +整数値をbyteaにキャストすると、整数型の幅に応じて、2、4、または8バイトで生成されます。 +結果は整数の2の補数表現で、最上位バイトが先頭になります。 +いくつかの例を示します。 1234::smallint::bytea \x04d2 cast(1234 as bytea) \x000004d2 @@ -5113,27 +6447,41 @@ cast(-1234 as bytea) \xfffffb2e '\x8000'::bytea::smallint -32768 '\x8000'::bytea::integer 32768 + +byteaを整数にキャストする場合、byteaの長さが整数型の幅を超えるとエラーが発生します。 + +内の集約関数string_agg内のラージオブジェクト関数も参照してください。
+ + ビット文字列関数と演算子 bit strings functions + + ビット文字列 + 関数 + + +本節ではbit型とbit varying型の値であるビット文字列を調べたり操作するための関数と演算子について説明します。 +(この表ではbit型だけが言及されていますが、bit varying型も同じように使用できます。) +ビット文字列はで示す通常の比較演算子およびで言及している演算子もサポートします。 + + ビット文字列演算子 + +演算子 + +説明 + +例 @@ -5168,7 +6532,10 @@ cast(-1234 as bytea) \xfffffb2ebit + +結合 B'10001' || B'011' @@ -5182,7 +6549,10 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット単位のAND(入力は同じ長さでなければなりません) B'10001' & B'01101' @@ -5196,7 +6566,10 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット単位のOR(入力は同じ長さでなければなりません) B'10001' | B'01101' @@ -5210,7 +6583,10 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット単位の排他的論理和(入力は同じ長さでなければなりません) B'10001' # B'01101' @@ -5224,7 +6600,10 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット単位の否定 ~ B'10001' @@ -5238,8 +6617,11 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット単位の左シフト(文字列長は保存されます) B'10001' << 3 @@ -5253,8 +6635,11 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット単位の右シフト(文字列長は保存されます) B'10001' >> 2 @@ -5266,23 +6651,38 @@ cast(-1234 as bytea) \xfffffb2e
+ +バイナリ文字列で利用可能な関数のいくつかは、で示すようにビット文字列でも利用可能です。 + + ビット文字列関数 + +関数 + +説明 + +例 @@ -5297,8 +6697,11 @@ cast(-1234 as bytea) \xfffffb2ebigint + +ビット文字列中のセットされているビットの数を返します(popcountとしても知られています)。 bit_count(B'10111') @@ -5315,7 +6718,10 @@ cast(-1234 as bytea) \xfffffb2e integer + +ビット文字列中のビット数を返します。 bit_length(B'10111') @@ -5336,7 +6742,10 @@ cast(-1234 as bytea) \xfffffb2e integer + +ビット文字列中のビット数を返します。 length(B'10111') @@ -5353,7 +6762,10 @@ cast(-1234 as bytea) \xfffffb2e integer + +ビット文字列中のバイト数を返します。 octet_length(B'1011111011') @@ -5370,12 +6782,16 @@ cast(-1234 as bytea) \xfffffb2e bit + +bitsstart番目のビットからcountビットをnewsubstringで置き換えます。 +countを省略するとnewsubstringの長さがデフォルトになります。 overlay(B'01010101010101010' placing B'11111' from 2 for 3) @@ -5392,8 +6808,11 @@ cast(-1234 as bytea) \xfffffb2e integer + +bits中のsubstringで指定する最初の文字列開始位置を返します。その文字列が存在しなければ0を返します。 position(B'010' in B'000001101011') @@ -5410,11 +6829,16 @@ cast(-1234 as bytea) \xfffffb2e bit + +start番目の文字で始まるbitsの部分文字列を取り出します。 +countが指定されていればcount数ビットを取り出します。 +少なくともstartcountのどちらかを指定してください。 substring(B'110010111111' from 3 for 2) @@ -5432,8 +6856,11 @@ cast(-1234 as bytea) \xfffffb2e integer + +ビット文字列のn番目のビットを取り出します。文字列の最初(一番左)のビットを0として数えます。 get_bit(B'101010101010101010', 6) @@ -5452,9 +6879,12 @@ cast(-1234 as bytea) \xfffffb2e bit + +ビット文字列のn番目のビットをnewvalueにします。文字列の最初(一番左)のビットを0として数えます。 set_bit(B'101010101010101010', 6, 0) @@ -5466,33 +6896,49 @@ cast(-1234 as bytea) \xfffffb2e
+ +さらに、bit型から整数値にキャストすることも整数からbit型にキャストすることも可能です。 +整数からbit(n)にキャストすると最右端のnビットがコピーされます。 +その整数より文字列幅が広いビットにキャストすると左のビットが符号拡張されます。 +以下に例を示します。 44::bit(10) 0000101100 44::bit(3) 100 cast(-44 as bit(12)) 111111010100 '1110'::bit(4)::integer 14 + +単にbitにキャストすることはbit(1)にキャストすることを意味することに注意してください。つまり、単に整数の最下位ビットのみが渡されることになります。
+ + パターンマッチ pattern matching + + パターンマッチ + + +PostgreSQLには、パターンマッチを行うに際して3つの異なった手法があります。伝統的なSQLLIKE演算子、これより新しいSIMILAR TO演算子(SQL:1999で追加されました)、およびPOSIX様式の正規表現です。 +基本のこの文字列はこのパターンに一致するか?を別としても、一致した部分文字列を取り出したり置換したり、そして一致部分で文字列を分割する関数が用意されています。 + +上記の手法では検索できないようなパターンマッチが必要な場合は、PerlもしくはTclでユーザ定義関数を作成することを検討してください。 + +ほとんどの正規表現検索はとても速く実行されますが、正規表現は処理するのに任意の時間とメモリを使う可能性があります。 +悪意のあるソースから正規表現検索パターンを受け取ることに用心してください。 +そうしなければならないのであれば、文のタイムアウトを強制するのが賢明です。 + +SIMILAR TOPOSIX書式の正規表現と同じ多くの機能を提供するので、SIMILAR TOパターンを使う検索は同様のセキュリティ問題を抱えています。 + +LIKE検索は、他の2つの方法よりずっと単純ですので、悪意があるかもしれないパターンのソースで使うのにはより安全です。 + +SIMILAR TOPOSIX書式の正規表現は、非決定論的照合順序をサポートしていません。 +必要なら、LIKEを使用するか別の照合順序を式に適用することで、この制限事項に対応してください。 @@ -5553,6 +7020,7 @@ cast(-44 as bit(12)) 111111010100 + +LIKE式は供給されたpatternstringが一致すれば真を返します。 +(想像される通り、NOT LIKE式はLIKE式が真を返す場合には偽を返し、その逆もまた同じです。 +同等の式としてNOT (string LIKE pattern)とも表現できます。) + +patternがパーセント記号もしくはアンダースコアを含んでいない場合patternは自身の文字列そのものです。この場合LIKE式は等号演算子のように振舞います。 +patternの中にあるアンダースコア(_)は任意の一文字との一致を意味し、パーセント記号(%)は0文字以上の並びとの一致を意味します。 + +例を示します。 'abc' LIKE 'abc' true 'abc' LIKE 'a%' true @@ -5584,22 +7063,31 @@ cast(-44 as bit(12)) 111111010100 + +LIKEパターンマッチングは、大文字と小文字を区別しない照合や句読点を無視する照合など、非決定論的照合順序をサポートします(を参照)。 +したがって、大文字と小文字を区別しない照合順序では、次のようになります。 'AbC' LIKE 'abc' COLLATE case_insensitive true 'AbC' LIKE 'a%' COLLATE case_insensitive true + +特定の文字を無視する照合順序や、一般的に異なる長さの文字列を等しいと見なす照合順序では、セマンティクスが少し複雑になる可能性があります。 +次の例を考えてみましょう。 '.foo.' LIKE 'foo' COLLATE ign_punct true '.foo.' LIKE 'f_o' COLLATE ign_punct true '.foo.' LIKE '_oo' COLLATE ign_punct false + +マッチングの仕組みとして、パターンがワイルドカードと非ワイルドカード文字列(ワイルドカードは_%です)の並びに分割されます。 +たとえば、パターンf_of, _, oと分割され、パターン_oo_, ooと分割されます。 +ワイルドカードがそれぞれ1文字または任意の数の文字と一致し、ワイルドカード以外の区分が該当する照合順序で等しくなるように分割できる場合、入力文字列はパターンと一致します。 +そのため、例えば、'.foo.' LIKE 'f_o' COLLATE ign_punctはtrueになります。 +これは、.foo..f, o, o.と分割でき、'.f' = 'f' COLLATE ign_punctとなり、'o'はワイルドカード_と一致し、'o.' = 'o' COLLATE ign_punctとなるからです。 +しかし、'.foo.' LIKE '_oo' COLLATE ign_punctはfalseになります。 +これは、.foo.は最初の文字が任意の文字で、残りの文字列がooと等しくなるように分割することができないためです。 +(1文字のワイルドカードは、照合順序に関係なく、常に1文字のみに一致することに注意してください。 +したがって、この例では、_.に一致しますが、入力文字列の残りの部分はパターンの残りの部分と一致しません。) + +LIKEによるパターン一致は常に文字列全体に対して行われます。 +従って、文字列内の任意位置における並びと一致させたい場合には、パーセント記号を先頭と末尾に付ける必要があります。 + +他の文字の一致に使用するのではなく、アンダースコアやパーセント記号そのものを一致させたい場合には、patternの中のそれぞれのアンダースコアとパーセント記号の前にエスケープ文字を付けなければなりません。 +デフォルトのエスケープ文字はバックスラッシュですが、ESCAPE句で他の文字を指定することができます。エスケープ文字そのものを一致させるにはエスケープ文字を2つ書きます。 + +パラメータをoffにしている場合、リテラル文字列定数に記述するバックスラッシュを二重にする必要があります。 +詳細はを参照してください。 + +同時にESCAPE ''と記述することでエスケープ文字を選択しないことも可能です。 +これにより、事実上エスケープ機構が働かなくなります。つまり、パターン内のアンダースコアおよびパーセント記号の特別な意味を解除することはできなくなります。 + +標準SQLによれば、ESCAPEは(デフォルトがバックスラッシュとなるのではなく)エスケープ文字が存在しないことを意味します。長さゼロのESCAPEは使用できません。 +ですからこの点でPostgreSQLは少し非標準な振る舞いをします。 + +現在のロケールに従って大文字小文字を区別しない一致を行うのであれば、LIKEの代わりにILIKEキーワードを使うことができます。 +(しかし、これは非決定的照合順序ではサポートされません。) +これは標準SQLではなく、PostgreSQLの拡張です。 + +~~演算子はLIKE式と等価で、~~*ILIKEに対応します。 +またNOT LIKEおよびNOT ILIKEを表す!~~および!~~*演算子があります。 +これら全ての演算子はPostgreSQL固有のものです。 +パーサは実際にはLIKEなどをこれらの演算子に変換するため、こうした演算子名はEXPLAINの出力などで見ることができます。 + +LIKEILIKENOT LIKENOT ILIKE句は一般にPostgreSQLの構文上は演算子として扱われます。 +たとえば、 演算子 ANY(副問い合わせ)構文で使用できます。しかし、ESCAPE句はこれには含むことはできません。 +状況によっては背後の演算子名を代わりに使わなければならない場合もあります。 + +単に文字列の先頭からの開始が必要なだけのケースであれば、そこから開始演算子^@とそれに対応するstarts_with関数もあります。 + + <function>SIMILAR TO</function>正規表現 regular expression + + 正規表現 + SIMILAR TO @@ -5726,6 +7269,7 @@ cast(-44 as bit(12)) 111111010100 + +SIMILAR TO演算子は、そのパターンが与えられた文字列に一致するかどうかにより、真もしくは偽を返します。 +これは、標準SQLの正規表現定義を使用してパターンを解釈するという点以外は、LIKEに類似しています。 +SQLの正規表現は、LIKE表記と一般的な(POSIX)正規表現の表記とを混ぜ合わせたようなものになっています。 + +LIKEと同様、SIMILAR TO演算子は、そのパターンが文字列全体に一致した場合のみ真を返します。これは、パターンが文字列の一部分であっても一致する、一般的な正規表現の動作とは異なっています。 +また、LIKEと同様、SIMILAR TOでは、%および_を、それぞれ任意の文字列および任意の単一文字を意味するワイルドカード文字として使用します(これらは、POSIX正規表現での.*および.に相当します)。 + +LIKEから取り入れた上記の機能に加え、SIMILAR TOでは、以下のようにPOSIX正規表現から取り入れたパターンマッチメタ文字もサポートしています。 + +|は、二者択一(2つの選択肢のうちいずれか)を意味します。 + +*は、直前の項目の0回以上の繰り返しを意味します。 + ++は、直前の項目の1回以上の繰り返しを意味します。 + +?は、直前の項目の0回もしくは1回の繰り返しを意味します。 + +{m}は、直前の項目の正確なm回の繰り返しを意味します。 + + {m,}は、直前の項目のm回以上の繰り返しを意味します。 + +{m,n}は、直前の項目のm回以上かつn回以下の繰り返しを意味します。 + +丸括弧()は、項目を1つの論理項目にグループ化することができます。 + +大括弧式[...]は、POSIX正規表現と同様に文字クラスを指定します。 + +SIMILAR TOではピリオド(.)はメタ文字ではないことに注意してください。 + +LIKEと同様、バックスラッシュは全てのメタ文字の特殊な意味を無効にします。 +異なるエスケープ文字をESCAPEで指定することもできますし、ESCAPE ''と書くことにより、エスケープ機能を無効にすることもできます。 + +標準SQLによれば、ESCAPEは(デフォルトがバックスラッシュとなるのではなく)エスケープ文字が存在しないことを意味します。長さゼロのESCAPEは使用できません。 +ですからこの点でPostgreSQLは少し非標準な振る舞いをします。 + +他の非標準の拡張としては、エスケープ文字に続く文字あるいは数字を用いてPOSIX正規表現で定義されたエスケープシーケンスへのアクセスを提供するというのがあります。 +以下のを参照してください。 + +例を示します。 'abc' SIMILAR TO 'abc' true 'abc' SIMILAR TO 'a' false @@ -5851,33 +7451,49 @@ cast(-44 as bit(12)) 111111010100 + +3つのパラメータを持つsubstring関数を使用して、SQL正規表現パターンに一致する部分文字列を取り出すことができます。 +標準SQLの構文にしたがって、この関数は次のように書くことができます。 substring(string similar pattern escape escape-character) + +あるいは今では廃れたSQL:1999の構文を使って次のように書くことができます。 substring(string from pattern for escape-character) + +あるいは単なる3引数関数として次のように書くこともできます。 substring(string, pattern, escape-character) + + ("). The text matching the portion of the pattern between these separators is returned when the match is successful. +--> +SIMILAR TOと同様、指定したパターンがデータ文字列全体に一致する必要があります。一致しない場合、関数は失敗し、NULLを返します。 +マッチするデータのうちの対象とする部分文字列に対応するパターンの部分を示すために、エスケープ文字の後に二重引用符(")を繋げたものを2つパターンに含める必要があります。 +マッチが成功すると、これらの区切り文字で囲まれたパターンの部分に一致するテキストが返されます。 + +エスケープ文字と二重引用符による区切りは実際にはsubstringのパターン引数を3つの独立した正規表現に分割します。 +たとえば3つのセクションのどこかに置いた垂直線(|)はそのセクションにしか影響を及ぼしません。 +また、どのパターンにデータ文字列がマッチするかについて曖昧さがある場合は、最初と3番目の正規表現は、可能な最大のテキストではなく、最小のテキストにマッチするものとして定義されます。 +(POSIX用語では、最初と3番目の正規表現は非貪欲(non-greedy)に強制されます。) + +標準SQLへの拡張として、PostgreSQLは、二重引用符による区切りが一個だけ存在することを許容し、その場合は3番目の正規表現が空として扱われます。 +あるいは、二重引用符による区切りがないことも許容し、その場合は最初と3番目の正規表現は空として扱われます。 + +例:#"を使用して返される文字列を区切ります。 substring('foobar' similar '%#"o_b#"%' escape '#') oob substring('foobar' similar '#"o_b#"%' escape '#') NULL @@ -5906,12 +7534,19 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULL + + <acronym>POSIX</acronym>正規表現 regular expression pattern matching + + 正規表現 + パターンマッチ + substring @@ -5944,24 +7579,39 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULL + +に、POSIX正規表現を使ったパターンマッチに使用可能な演算子を列挙します。 + + 正規表現マッチ演算子 + +演算子 + +説明 + +例 @@ -5973,7 +7623,10 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULLboolean + +文字列が正規表現にマッチ、大文字小文字の区別あり 'thomas' ~ 't.*ma' @@ -5987,7 +7640,10 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULLboolean + +文字列が正規表現にマッチ、大文字小文字の区別なし 'thomas' ~* 'T.*ma' @@ -6001,7 +7657,10 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULLboolean + +文字列が正規表現にマッチしない、大文字小文字の区別あり 'thomas' !~ 't.*max' @@ -6015,7 +7674,10 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULLboolean + +文字列が正規表現にマッチしない、大文字小文字の区別なし 'thomas' !~* 'T.*ma' @@ -6027,15 +7689,20 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULL + +POSIX正規表現は、パターンマッチという意味合いでは、LIKEおよびSIMILAR TO演算子よりもさらに強力です。 +egrepsed、あるいはawkのような多くのUnixツールはここで解説しているのと類似したパターンマッチ言語を使用しています。 + +正規表現とは文字列の集合(正規集合)の簡略された定義である文字が連なっているものです。 +ある文字列が正規表現で記述された正規集合の要素になっていれば、その文字列は正規表現にマッチしていると呼ばれます。 +LIKEと同様、正規表現言語で特殊文字とされているもの以外、パターン文字は文字列と完全にマッチされます。とは言っても、正規表現はLIKE関数が使用するのとは異なる特殊文字を使用します。 +LIKE関数のパターンと違って正規表現は、明示的に正規表現が文字列の最初または最後からと位置指定されていない限り文字列内のどの位置でもマッチを行えます。 + +例を示します。 'abcd' ~ 'bc' true 'abcd' ~ 'a.c' true — dot matches any character @@ -6063,11 +7738,15 @@ substring('foobar' similar '#"o_b#"%' escape '#') NULL + +POSIXパターン言語について以下により詳しく説明します。 + +2つのパラメータを持つsubstring関数、substring(string from pattern)を使用して、POSIX正規表現パターンにマッチする部分文字列を取り出すことができます。 +この関数は、マッチするものがない場合にはNULLを返し、ある場合はパターンに最初にマッチしたテキストの一部を返します。 +しかし、丸括弧を持つパターンの場合、最初の丸括弧内部分正規表現(左丸括弧が最初に来るもの)にマッチするテキストの一部が返されます。 +この例外を起こさずにパターン中に丸括弧を使用したいのであれば、常に正規表現全体を丸括弧で囲むことができます。 +パターン内の抽出対象の部分文字列より前に丸括弧が必要な場合、後述の捕捉されない丸括弧を参照してください。 + +例を示します。 substring('foobar' from 'o.b') oob substring('foobar' from 'o(.)b') o @@ -6093,6 +7781,7 @@ substring('foobar' from 'o(.)b') o + +regexp_count関数は、POSIX正規表現パターンが文字列とマッチした箇所の数をカウントします。 +この関数はregexp_count(string,pattern,start,flags)という構文を持ちます。 +patternstringで検索されます。 +通常は文字列の先頭から検索されますが、startパラメータが指定されている場合は、その文字インデックスから検索が開始されます。 +flagsパラメータは、オプションのテキスト文字列であり、関数の動作を変更する0個以上の単一文字フラグを含みます。 + たとえば、flagsiを含めると、大文字と小文字を区別しないマッチングを指定します。 +サポートされているフラグはで説明されています。 + +例を示します。 regexp_count('ABCABCAXYaxy', 'A.') 3 regexp_count('ABCABCAXYaxy', 'A.', 1, 'i') 4 @@ -6122,6 +7822,7 @@ regexp_count('ABCABCAXYaxy', 'A.', 1, 'i') 4 + +regexp_instr関数は、文字列に対するPOSIX正規表現パターンのN番目のマッチの開始位置または終了位置を返します。 +マッチがない場合は0を返します。 +構文は、regexp_instr(string, pattern , start , N , endoption , flags , subexpr + )を持ちます。 +patternstring内で検索されます。通常は文字列の先頭から検索されますが、startパラメータが指定されている場合は、その文字インデックスから検索が開始されます。 +Nが指定されている場合は、パターンのN番目の一致が検索されます。 +それ以外の場合は、最初の一致が検索されます。 +endoptionパラメータが省略されているか0が指定されている場合、関数は一致の最初の文字の位置を返します。 +それ以外の場合は、endoptionは1である必要があり、関数は一致の次の文字の位置を返します。 +flagsパラメータは、関数の動作を変更する0個以上の単一文字フラグを含むオプションのテキスト文字列です。 +サポートされているフラグはで説明されています。 +カッコで囲まれた部分式を含むパターンでは、subexprは対象の部分式を示す整数です。 +結果は、その部分式に一致する部分文字列の位置を示します。 +部分式は先頭のカッコの順に番号が付けられます。 +subexprが省略されているか0の場合、結果はカッコで囲まれた部分式に関係なく、一致全体の位置を示します。 + +例を示します。 regexp_instr('number of your street, town zip, FR', '[^,]+', 1, 2) 23 @@ -6171,6 +7891,7 @@ regexp_instr(string=>'ABCDEFGHI', pattern=>'(c..)(...)', start=>1, "N"=>1, endop + +regexp_like関数は、POSIX正規表現パターンの一致が文字列内にあるかどうかをチェックし、ブール値trueまたはfalseを返します。 +構文はregexp_likestring,pattern,flags)です。 +flagsパラメータは、関数の動作を変更する0個以上の単一文字フラグを含むオプションのテキスト文字列です。 +サポートされているフラグはで説明されています。 +フラグが指定されていない場合、この関数は~演算子と同じ結果になります。 +iフラグのみが指定されている場合、~*演算子と同じ結果になります。 + +例を示します。 regexp_like('Hello World', 'world') false regexp_like('Hello World', 'world', 'i') true @@ -6196,6 +7927,7 @@ regexp_like('Hello World', 'world', 'i') true + +regexp_match関数はPOSIX正規表現パターンを文字列にマッチさせた結果、一致した最初の部分文字列のテキスト配列を返します。 +regexp_match(string, pattern , flags )の構文になります。 +マッチするものがなければ、結果はNULLとなります。 +マッチする部分があり、かつpatternが丸括弧で括られた部分文字列を含まない場合、結果はパターン全体にマッチする部分文字列を含む単一要素のテキスト配列となります。 +マッチする部分があり、かつpatternが丸括弧で括られた部分文字列を含む場合、結果はテキスト配列で、そのn番目の要素はpatternn番目に丸括弧で括られた部分文字列にマッチする部分文字列となります(捕捉されない丸括弧は数えません。詳細は以下を参照してください)。 +flagsパラメータは、関数の動作を変更するゼロもしくは複数の単一文字フラグを含むオプションのテキスト文字列です。 +有効なフラグはに記載されています。 + +例を示します。 SELECT regexp_match('foobarbequebaz', 'bar.*que'); regexp_match @@ -6236,6 +7979,7 @@ SELECT regexp_match('foobarbequebaz', '(bar)(beque)'); + +部分文字列全体を一致させたい、またはNULLを一致させたくないという一般的なケースでは、最善の解決策はregexp_substr()を使用することです。 +しかし、regexp_substr()PostgreSQLバージョン15以降にしか存在しません。 +古いバージョンで作業する場合、以下のようにregexp_match()の結果の最初の要素を抽出することができます。 SELECT (regexp_match('foobarbequebaz', 'bar.*que'))[1]; regexp_match @@ -6254,6 +8002,7 @@ SELECT (regexp_match('foobarbequebaz', 'bar.*que'))[1]; + +regexp_matches関数はPOSIX正規表現パターンを文字列にマッチさせた結果、一致した部分文字列のテキスト配列の集合を返します。 +構文はregexp_matchと同じです。 +この関数は、マッチするものがないときは行を返しませんが、マッチするものがあり、gフラグが指定されていないときは1行だけ、マッチするものがN個あり、gフラグが指定されているときはN行を返します。 +返される各行は上でregexp_matchについて説明したのと全く同じで、マッチする部分文字列全体、またはpatternの丸括弧で括られた部分文字列にマッチする部分文字列を含むテキスト配列です。 +regexp_matchesに示すすべてのフラグに加え、最初のマッチだけでなくすべてのマッチを返すgを受け付けます。 + +例を示します。 SELECT regexp_matches('foo', 'not there'); regexp_matches @@ -6290,6 +8048,7 @@ SELECT regexp_matches('foobarbequebazilbarfbonk', '(b[^b]+)(b[^b]+)', 'g'); + +最初にマッチするものだけが必要なときはregexp_match()を使う方がより簡単で効率的ですから、regexp_matches()はほとんどの場合gフラグを指定して使われるでしょう。 +しかし、regexp_match()PostgreSQLのバージョン10以上でのみ利用できます。 +古いバージョンを使う時によくある手法は、以下の例のように、副SELECTの中にregexp_matches()の呼び出しを入れることです。 SELECT col1, (SELECT regexp_matches(col2, '(bar)(beque)')) FROM tab; + +これはregexp_match()と同じく、マッチするものがあればテキスト配列を生成し、マッチしなければNULLとなります。 +副SELECTを使わなければ、マッチするものがないテーブル行については問い合わせの出力が生成されず、多くの場合に期待される動作と異なります。 + +regexp_replace関数は、POSIX正規表現パターンに一致する部分文字列を新規テキストと置換します。 +構文は、regexp_replace(string, pattern, replacement , flags )、またはregexp_replace(string, pattern, replacement, start , N , flags )です。 +patternに一致しない場合は、元のstring文字列がそのまま返されます。 +一致すると、一致した部分文字列をreplacement文字列で置換したstringが返されます。 +replacement文字列に\nnは1から9までの数字)を入れて、パターン内のn番目の丸括弧つき部分表現に一致する元の部分文字列を挿入することができます。 +また、\&を入れて、パターン全体と一致する部分文字列を挿入することもできます。 +置換テキスト内にバックスラッシュそのものを挿入する必要がある時は\\と記述します。 +通常stringの先頭からpatternが文字列内で検索されますが、start引数が与えられるとその文字インデックスから検索されます。 +デフォルトでは、最初に一致したパターンのみが置き換えられます。 +Nが指定され、それがゼロよりも大きい時は、N番目に一致したパターンが置き換えられます。 +gフラグが指定されているか、Nがゼロに指定されている場合は、start位置以降で一致するすべてのパターンが置き換えられます。 +(gフラグはNが指定されている時は無視されます。) +flagsパラメータは、関数の動作を変更するゼロもしくはそれ以上の1文字フラグを含むオプションのテキスト文字列です。 +有効なフラグ(gを除く)はに記述されています。 + +例を示します。 regexp_replace('foobarbaz', 'b..', 'X') fooXbaz @@ -6369,6 +8155,7 @@ regexp_replace(string=>'A PostgreSQL function', pattern=>'a|e|i|o|u', replacemen + +regexp_split_to_table関数はPOSIX正規表現パターンを区切り文字として使用し、文字列を分割します。regexp_split_to_table(string, pattern , flags )の構文になります。 +patternにマッチしない場合、関数はstringを返します。 +少なくともひとつのマッチがあれば、それぞれのマッチに対して関数は最後のマッチの終わり(あるいは文字列の始め)から最初のマッチまでのテキストを返します。 +もはやマッチしなくなると最後のマッチの終わりから文字列の最後までテキストを返します。 +flagsパラメータは、関数の動作を変更するゼロもしくは複数の単一文字フラグを含むオプションのテキスト文字列です。 +regexp_split_to_tableで記載されているフラグをサポートします。 + +regexp_split_to_array関数は、regexp_split_to_arrayがその結果をtext配列で返すことを除いて、regexp_split_to_tableと同じ動作をします。 +regexp_split_to_array(string, pattern , flags )の構文になります。 +パラメータはregexp_split_to_tableのものと同じです。 + +例を示します。 SELECT foo FROM regexp_split_to_table('the quick brown fox jumps over the lazy dog', '\s+') AS foo; foo @@ -6440,15 +8242,21 @@ SELECT foo FROM regexp_split_to_table('the quick brown fox', '\s*') AS foo; + +最後の例が明らかにしているように、regexp分割関数は文字列の最初あるいは終わり、もしくは前のマッチの直後に発生する長さを持たないマッチを無視します。 +他の正規表現関数で実装されたregexpマッチの厳格な定義にこれは相容れませんが、実務上は最も使い勝手の良い動作です。 +Perlのような他のソフトウェアシステムも似たような定義を使用します。 + +regexp_substr関数は、POSIX正規表現パターンと一致する部分文字列を返します。 +一致しない場合はNULLを返します。 +regexp_substrstring,pattern,start,N,flags,subexpr)の構文となっています。 +patternstring内で検索されます。通常は文字列の先頭から検索されますが、startパラメータが指定されている場合は、その文字インデックスから検索が開始されます。 +Nが指定されている場合は、パターンのN番目に一致するものが返されます。 +指定されていない場合は、最初に一致するものが返されます。 +flagsパラメータは、関数の動作を変更する0個以上の単一文字フラグを含むオプションのテキスト文字列です。 +サポートされているフラグはで説明されています。 +カッコで囲まれた部分式を含むパターンの場合、subexprは対象となる部分式を示す整数です。 +結果はその部分式に一致する部分文字列になります。 +部分式には、先頭のカッコの順に番号が付けられます。 +subexprが省略されているか0の場合、結果はカッコで囲まれた部分式に関係なく全体に一致します。 + +例を示します。 regexp_substr('number of your street, town zip, FR', '[^,]+', 1, 2) town zip @@ -6492,16 +8316,24 @@ regexp_substr('ABCDEFGHI', '(c..)(...)', 1, 1, 'i', 2) + + 正規表現の詳細 + +PostgreSQLの正規表現はHenry Spencerにより書かれたソフトウェアパッケージを使用して実装されています。 +以下に説明する正規表現の多くの部分は同氏のマニュアルから一字一句複製したものです。 + +POSIX 1003.2の定義によると、正規表現(RE)には2つの形式があるとされます。拡張REもしくはERE(大まかにいってegrepに代表されるもの)、および基本REもしくはBRE(大まかにいってedに代表されるもの)です。 +PostgreSQLは両方の形式をサポートし、さらに、POSIX標準にはないけれどもPerlやTclなどのプログラミング言語で利用できることから広く使用されるようになった、いくつかの拡張もサポートしています。 +本書では、非POSIX拡張を使用したRE高度なREもしくはAREと呼びます。AREはEREの正確な上位セットですが、BREとは複数の記法上の非互換な点があります(さらに非常に多くの制限が課されています)。 +まず、AREとERE形式について説明し、そして、AREにのみ適用される機能の注意を、さらにBREとの違いについて説明します。 + +PostgreSQLは常に、まず正規表現はARE規則に従うと推測します。 +しかし、REパターンの前に、に記載されているような埋め込みオプションを追加することにより、より限られたERE、あるいはBRE規則を選択することができます。 +これは、POSIX1003.2の規則を正確に期待しているアプリケーションとの互換性に関して有用です。 + +正規表現は|で区切られた、1つまたは複数のブランチとして定義されます。 +ブランチのいずれか1つにマッチすればマッチしたことになります。 + +ブランチはゼロ個以上の量化アトムもしくは制約の連結です。 +最初のものにマッチに、次に第2番目のものにマッチを、というふうにマッチします。なお、空のブランチは空文字列にマッチします。 + +量化アトムとは、単一の量指定子が後ろに付くアトムのことです。 +量指定子がないと、アトムにマッチするものがマッチしたことになります。 +量指定子がある場合、アトムとのマッチが何回あるかでマッチしたことになります。 +アトムは、に示したもののいずれかを取ることができます。 + に設定可能な量指定子とその意味を示します。 + +制約は空文字に、特定の条件に合う場合のみにマッチします。 +アトムを使用できるところには制約を使用することができます。ただしその後に量指定子を付けることはできません。 +単純な制約をに示します。後で他のいくつかの制約を説明します。
+ + 正規表現のアトム + + アトム + + 説明 (re) + + (ここでre は任意の正規表現で、)reとのマッチに適合するもです。 マッチは可能である報告用と意味づけられます。 (?:re) + + 上と同じ。ただし、マッチは報告用と意味づけられません。(捕捉されない括弧の集合)(AREのみ) . + + 任意の1文字にマッチします。 [chars] + + + ブラケット式。 + charsのいずれか1つにマッチします + (詳細はを参照してください)。 + \k + + (ここでkは英数字以外です。)普通の文字として指定した文字にマッチします。例えば、\\はバックスラッシュ文字です。 \c + + ここでcは英数字です + (おそらく他の文字が後に続きます)。 + エスケープです。 + を参照してください + (AREのみ、EREとBREではこれはcにマッチします)。 + { + + 直後に数字以外がある場合、左中括弧{にマッチします。 +直後に数字が続く場合、バウンド(後述)の始まりです。 x + + ここでxは他に意味を持たない1文字です。 +xにマッチします。
+ +REはバックスラッシュ\を終端とすることはできません。 + +もしパラメータをoffにしていた場合、リテラル文字列定数に記述するバックスラッシュは2倍必要となります。 + 詳細はを参照してください。 + + 正規表現量指定子 + + 量指定子 + + マッチ * + + アトムの0個以上複数の並びにマッチ + + + アトムの1個以上複数の並びにマッチ ? + + アトムの0個または1個の並びにマッチ {m} + + アトムの正確にm個の並びにマッチ {m,} + + アトムのm個以上の並びにマッチ {m,n} + + アトムのm個以上n以下の並びにマッチ。 +mnを超えることはできません。 *? + + *の最短マッチを行うバージョン +? + + +の最短マッチを行うバージョン ?? + + ?の最短マッチを行うバージョン {m}? + + {m}の最短マッチを行うバージョン {m,}? + + {m,}の最短マッチを行うバージョン {m,n}? + + {m,n}の最短マッチを行うバージョン
+ +{...}を使用する形式はバウンドとして知られています。 +バウンド内のmnという数は符号なし10進整数であり、0以上255以下の値を取ることができます。 + +最短マッチを行う量指定子(AREのみで使用可能)は、対応する通常の(欲張りの)ものと同じものにマッチしますが、最大のマッチではなく最小のマッチを取ります。 +詳細はを参照してください。 + +量指定子の直後に量指定子を続けることはできません。例えば**は無効です。 +量指定子から式や副式を始めることはできず、また、^|の直後に付けることもできません。 + + 正規表現制約 + + 制約 + + 説明 ^ + + 文字列の先頭にマッチ $ + + 文字列の末尾にマッチ (?=re) + + 先行肯定検索は、reにマッチする部分文字列が始まる任意の場所にマッチします(AREのみ)。 (?!re) + + 先行否定検索は、reにマッチしない部分文字列が始まる任意の場所にマッチします(AREのみ)。 (?<=re) + + 後方肯定検索reにマッチする部分文字列が終わる任意の場所にマッチします(AREのみ)。 (?<!re) + + 後方否定検索reにマッチしない部分文字列が終わる任意の場所にマッチします(AREのみ)。
+ +先行検索制約および後方検索制約には後方参照を参照)を含めることはできません。また、その中の括弧は全て取り込むものではないとみなされます。 + + ブラケット式 + +ブラケット式とは、[]内の文字のリストです。 +通常これはそのリスト内の任意の1文字にマッチします(しかし、以降を参照してください)。 +リストが^から始まる場合、そのリストの残りにはない任意の1文字にマッチします。 +リスト内の2文字が-で区切られていた場合、これは2つ(を含む)の間にある文字範囲全体を表す省略形となります。例えば、ASCIIにおける[0-9]は全ての数字にマッチします。 +例えばa-c-eといった、終端を共有する2つの範囲は不正です。 +範囲は並びの照合順に非常に依存しています。ですので、移植予定のプログラムではこれに依存してはなりません。 + +このリストに]そのものを含めるには、それを先頭文字(もしそれが使用されれば^の後)にしてください。 +-そのものを含めるには、それを先頭もしくは末尾の文字とするか、範囲の2番目の終端としてください。 +-を範囲の最初の終端で使用するには、[..]でそれを囲み、照合要素(後述)にしてください。 +これら文字と、[(次段落を参照)のなんらかの組み合わせ、およびエスケープ(AREのみ)を例外として、他の全ての特殊文字はブラケット式内では特殊な意味を持ちません。 +特に、\はEREとBRE規則に従う場合は特別でなくなります。しかし、AREでは(エスケープの始まりとして)特別な意味を持ちます。 + +ブラケット式内に、照合要素(文字、単一文字であるかのように照合する複数文字の並び、もしくはそれぞれの照合並びの名前)が[..]の間にあると、その照合要素の文字の並びを意味します。 +この並びはブラケット式のリストの一要素として取り扱われます。 +このことにより、ブラケット式は要素を照合する複数文字を含むブラケット式を1文字以上にマッチさせることができます。例えば、照合並びがch照合要素を含む場合、正規表現[[.ch.]]*cchchccという文字の最初の5文字にマッチします。 + +今のところ、PostgreSQLは複数文字照合要素をサポートしません。 +この情報は将来の振舞いの可能性を説明したものです。 + +ブラケット式内の[==]の間に照合要素は同値クラスです。全ての照合要素の文字の並びが自身を含むものと等価であることを示します。 +(他に等価な照合要素がある場合、[..]で囲まれたかのように扱われます。) +例えば、[[=o=]][[=^=]]および[o^]が全て同意語であれば、o^は同値クラスのメンバです。 +同値クラスは範囲の終端にはなりません。 + +ブラケット式内では、[::]の間にある文字クラスの名称は、そのクラスに属する全ての文字のリストを意味します。 +文字クラスは範囲の終端位置としては使用できません。 +POSIX標準は以下の文字クラス名を定義しています。 +alnum(文字と数字)、alpha(文字)、blank(空白とタブ)、cntrl(制御文字)、digit(数字)、graph(空白以外の印字可能文字)、lower(小文字)、print(空白を含む印字可能文字)、punct(句読点)、space(空白)、upper(大文字)、xdigit(16進数)です。 +これらの標準文字クラスの振る舞いは7-bit ASCII集合の範囲であれば一般にどのプラットフォームでも同じです。 +与えられた非ASCII文字がこれらの文字クラスに属すると考えられるかどうかは、正規表現関数または演算子(参照)で使用される照合順、あるいはデフォルトとしてはデータベースのLC_CTYPEロケール()の設定によります。 +非ASCII文字の分類は、たとえ似たような名前のロケールであってもプラットフォームによって異なることがありえます。 +(ただしCロケールでは、すべての非ASCII文字はこれらのクラスのどれにも所属しないものとされます。) +これらの標準クラスに加え、PostgreSQLではalnumと同様だがアンダースコア(_)文字を加えたword文字クラス、そして7-bit ASCII集合を正確に含むascii文字クラスが定義されています。 + +ブラケット式には2つの特殊な場合があります。[[:<:]][[:>:]]というブラケット式は、先頭と終端の単語がそれぞれ空文字であることにマッチする制約です。 +単語は、単語文字が前後に付かない単語文字の並びとして定義されます。 +単語文字とはword文字クラスに所属するすべての文字、すなわちすべての文字、数字、アンダースコアです。 +これは、POSIX 1003.2との互換性はありますが、そこでは定義されていない式です。ですので、他システムへ移植予定のソフトウェアでの使用には注意が必要です。 +通常後述の制約エスケープの方がよく使われます。これはもはや標準ではありませんが、入力しやすいものです。 + + 正規表現エスケープ + +エスケープとは、\から始まり英数字がその後に続く特殊な並びです。 +エスケープには、文字エントリ、クラス省略、制約エスケープ、後方参照といった様々な変種があります。 +\の後に英数字が続くけれども、有効なエスケープを構成しない並びはAREでは不正です。 +EREにはエスケープはありません。ブラケット式の外側では、\の後に英数字が続く並びは単に普通の文字としてその文字を意味します。ブラケット式の内側では、\は普通の文字です。 +(後者はEREとARE間の非互換性の1つです。) + +文字エントリエスケープは非印字文字やRE内でその他の不便な文字の指定を簡略化するために存在します。 +これらをに示します。 + +クラス省略エスケープは、あるよく使用される文字クラスの省略形を提供します。 +これらをに示します。 + +制約エスケープは、指定した条件に合う場合に空文字にマッチする制約をエスケープとして表したものです。 +これらをに示します。 + +後方参照\n)は、直前に括弧で囲まれた副式によってマッチされた、n番目の同一文字列にマッチします(を参照してください)。 + 例えば、([bc])\1bbもしくはccにマッチしますが、bccbにはマッチしません。REでは副式全体は後方参照の前になければなりません。 +副式は開括弧の順番で番号付けされます。 +取り込まない括弧は副式を定義しません。 +後方参照は参照される副式にマッチした文字列のみを考慮し、そこに含まれる制約は考慮しません。 +たとえば、(^\d)\122にマッチします。 + + 正規表現文字エントリエスケープ + + エスケープ + + 説明 \a + + C言語と同じ警報(ベル)文字 \b + + C言語と同じバックスペース \B + + バックスラッシュの必要な二重化回数を減らすためのバックスラッシュ(\)の同義語 \cX + + (ここでXは任意の文字で)その下位5ビットがXと同一、その他のビットが0となる文字 \e + + 照合順名がESCとなる文字、それに失敗したら、033という8進数値を持つ文字。 \f + + C言語と同じ改ページ \n + + C言語と同じ改行 \r + + C言語と同じ復帰 \t + + C言語と同じ水平タブ \uwxyz + + (ここでwxyzは正確に4桁の16進数で)その16進数での値が0xwxyzという文字 \Ustuvwxyz + + (ここでstuvwxyzは正確に8桁の16進数で)その16進数での値が0xstuvwxyzという文字 \v + + C言語と同じ垂直タブ \xhhh + + (ここでhhhは任意の16進数の並びで)その文字の16進数値が0xhhhとなる文字(使用される16進数の桁数にかかわらず単一の文字) \0 + + その値が0(NULLバイト)となる文字 \xy + + (ここでxyは正確に2桁の8進数で、後方参照ではない)その値が0xyとなる文字 \xyz + + (ここでxyzは正確に3桁の8進数で、後方参照ではない)その値が0xyzとなる文字
+ +16進数の桁とは0-9a-fA-Fです。 +8進数の桁とは0-7です。 + +ASCIIの範囲(0-127)外の値を指定した数字のエントリエスケープは、その意味がデータベースエンコーディングに依存します。 +エンコーディングがUTF-8の場合、エスケープ値はユニコード符号位置に相当します。例えば、\u1234は文字U+1234を意味します。 +その他のマルチバイトエンコーディングでは、文字エントリエスケープはたいてい文字のバイト値の連結を指定します。 +エスケープ値がデータベースエンコーディングでのいかなる正当な文字にも対応しない場合、エラーは起こりませんが、いかなるデータにもマッチしません。 + +この文字エントリエスケープは常に普通の文字と解釈されます。 +例えば、\135はASCIIの]となり、\135はブラケット式の終端にはなりません。 + + 正規表現クラス省略エスケープ + + エスケープ + + 説明 \d + + [[:digit:]]のようなすべての数字にマッチします。 \s + + [[:space:]]のようなすべての空白文字にマッチします。 \w + + [[:word:]]のようなすべての単語文字にマッチします。 \D + + [^[:digit:]]のようなすべての非数字にマッチします。 \S + + [^[:space:]]のようなすべての非空白文字にマッチします。 \W + + [^[:word:]]のようなすべての非単語文字にマッチします。
+ +クラス省略エスケープはブラケット式の中でも使えますが、上に示した定義はそのコンテキストでは構文的に正しいとは言えません。 +たとえば[a-c\d][a-c[:digit:]]と同様です。 + + 正規表現制約エスケープ + + エスケープ + + 説明 \A + + 文字列の先頭にのみマッチします(^との違いについてはを参照してください)。 \m + + 単語の先頭にのみマッチします。 \M + + 単語の末尾にのみマッチします。 \y + + 単語の先頭もしくは末尾にのみマッチします。 \Y + + 単語の先頭もしくは末尾以外の場所にのみマッチします。 \Z + + 文字列の末尾にのみマッチします($との違いについてはを参照してください)。
+ + 単語は前述の[[:<:]][[:>:]]の規定通りに定義されます。ブラケット式内では制約エスケープは不正です。 + + 正規表現後方参照 + + エスケープ + + 説明 \m + + (ここでmは非ゼロの数です。)副式のm番目への後方参照 \mnn + + (ここでmは非ゼロの数です。nnでさらに桁を指定します。mnn10進数値は取り込み括弧の数よりも多くてはなりません。)副式のmnn番目への後方参照 @@ -7279,6 +9508,7 @@ regexp_substr('ABCDEFGHI', '(c..)(...)', 1, 1, 'i', 2) + +8進数の文字エントリエスケープと後方参照の間には曖昧性があります。上でヒントとして示したようにこれは以下の発見的手法で解決されます。 +先頭の0は常に8進数エスケープを示します。 +その後に数字が続かない単一の非ゼロ数字は常に後方参照として解釈されます。 +ゼロから始まらない複数数字の並びは、適切な副式の後にあれば(つまり、その番号が後方参照用の範囲内にあれば)後方参照として解釈されます。さもなくば、8進数として解釈されます。 + + 正規表現メタ構文 + +上述の主構文の他に、特殊な形式や雑多な構文的な機能が使用可能です。 + +REは、2つの特殊な決定子前置詞のどちらかから始まります。 +REが***:から始まるものであれば、REの残りはAREと解釈されます。 +(PostgreSQLはREをAREとして推測するため、通常は影響を受けません。ただし、正規表現関数に対してflagsパラメータを指定されたEREやBREモードでは影響を受けます。) +REが***=から始まるものであれば、REの残りは、全ての文字を普通の文字とみなしたリテラル文字列と解釈されます。 + +AREは埋め込みオプションから始められます。(?xyz)という並びで残りのREに影響するオプションを指定します(ここでxyzは1つ以上の英字です)。 +このオプションは、事前に決定されたオプションを上書きします。— 特に、正規表現演算子、もしくは正規表現関数に与えられたflagsパラメータにより示される大文字小文字の区別を上書きします。 +使用可能なオプション文字をに示します。 +これらの同じオプション文字が、正規表現関数のflagsパラメータで使用されることに注意して下さい。
+ + ARE埋め込みオプション文字 + + オプション + + 説明 b + + 残りのREはBRE c + + 大文字小文字を区別するマッチ(演算子で規定される大文字小文字の区別よりこの指定が優先されます)。 e + + 残りのREはERE i + + 大文字小文字を区別しないマッチ(を参照)(演算子で規定される大文字小文字の区別よりこの指定が優先されます)。 m + + nの歴史的な同義語 n + + 改行を区別するマッチ(を参照) p + + 部分的な改行を区別するマッチ(を参照) q + + 残りのREはリテラル(引用符付けされた)文字列、全て普通の文字 s + + 改行を区別しないマッチ(デフォルト) t + + 厳しめの構文(デフォルト、後述) w + + 部分的な改行区別の逆(ワイアード)マッチ(を参照) x + + 拡張構文(後述)
+ +埋め込みオプションはその並びの終端)で有効になります。 +AREの先頭(もし***:決定子があればその後)でのみ利用可能です。 + +全ての文字が意味を持つ、通常の(厳しめの)RE構文に加え、x埋め込みオプションを指定することで利用できる拡張構文があります。 +拡張構文では、RE内の空白文字は無視され、#とその後の改行(もしくはREの終端)の間の全ての文字も同様です。 +これにより、段落付けや複雑なREのコメント付けが可能になります。 +基本規則に対して3つの例外があります。 + +直前に\が付いた空白文字もしくは#は保持されます。 + +ブラケット式内の空白文字もしくは#は保持されます。 + +(?:などの複数文字シンボルでは、空白文字とコメントは不正です。 + +ここでの空白文字とは、空白、タブ、改行、スペース文字クラスに属する文字です。 + +最後に、AREのブラケット式の外側では、(?#ttt)という並びは完全に無視されるコメントになります(ここでtttを含まない任意のテキストです)。 +繰り返しになりますが、これは(?:などの複数文字シンボルの文字間では使用できません。 +こうしたコメントは実用性というより歴史的所産です。そのため、この使用は勧めません。代わりに拡張構文を使用してください。 + +初めに***=決定子が指定され、ユーザの入力がREではなくリテラルとして扱われる場合、これらのメタ構文拡張は使用できません
+ + 正規表現マッチ規則 + +REが文字列の中の1つ以上の部分文字列とマッチする場合において、REは最初にマッチが始まった部分文字列とマッチします。 +その位置からまた1つ以上の部分文字列とマッチした際は、正規表現は最短マッチを行わない(欲張り型)最短マッチを行う(非欲張り型)かによって、最長マッチもしくは最短マッチの文字列のどちらかにマッチします + +REが最長マッチかどうかは以下の規則によって決まります。 + +ほとんどのアトムと全ての制約は欲張り属性を持ちません(これらは変動する量のテキストにまったくマッチしないからです)。 + +REを括弧で括ることは欲張りかどうかを変更しません。 + +{m}もしくは{m}?といった固定繰り返し数の量指定子を持つ量指定付きアトムは、アトム自身と同一の欲張りさを持ちます(まったく持たない可能性もあります)。 + +他の通常の量指定子({m,n}mnが等しい場合も含みます)を持つ量指定付きアトムは欲張り型です(最長マッチを使用します)。 + +他の非欲張り型量指定子({m,n}?mnが等しい場合も含みます)を持つ量指定付きアトムは非欲張り型です(最短マッチを使用します)。 + +最上位レベルの|演算子を持たないREであるブランチは、最初の欲張り属性を持つ量指定付きアトムと同一の欲張り属性を持ちます。 + +|演算子で接続された2つ以上のブランチからなるREは常に欲張り型です。 + +上の規則は、個々の量指定付きアトムだけではなく、量指定付きアトムを複数含むブランチやRE全体の欲張り属性に関連します。 +つまり、ブランチやRE全体が全体として最長または最短の部分文字列にマッチするという方法でマッチ処理が行われます。 +全体のマッチの長さが決まると、特定の部分式にマッチする部分がその部分式の欲張り属性によって決まります。この時、RE内でより前にある部分式が後にある部分式よりも高い優先度を持ちます。 + +この意味の例を示します。 SELECT SUBSTRING('XY1234Z', 'Y*([0-9]{1,3})'); Result: 123 SELECT SUBSTRING('XY1234Z', 'Y*?([0-9]{1,3})'); Result: 1 + +最初の例では、Y*が欲張り型であるため、REは全体として欲張り型です。 +マッチはYの位置から始まり、そこから可能な限り最長の文字列にマッチします。つまりY123となります。 +出力は括弧で括られた部分、つまり123となります。 +2番目の例では、Y*?が非欲張り型のため、REは全体として非欲張り型です。 +マッチはYの位置から始まり、そこから可能な限り最短の文字列にマッチします。つまりY1となります。 +部分式[0-9]{1,3}は欲張り型ですが、決定されたマッチする全体の長さを変更することはできません。したがって、強制的に1にマッチすることになります。 + +まとめると、REが欲張り型部分式と非欲張り型部分式の両方を持つ場合、全体のマッチ長はRE全体に割り当てられる属性に応じて、最長マッチ長か最短マッチ長のどちらかになります。 +部分式に割り当てられた属性は、部分式の中でどれだけの量をその部分式の中で消費できるかのみに影響します。 + +{1,1}および{1,1}?量指定子を副式もしくはRE全体に使用して、それぞれ、欲張りか欲張りでないかを強制することが可能です。 +RE全体に対してはその要素から推論されるものと異なる欲張りさの属性が必要な場合に、これは便利です。 +例として、数字をいくつか含む文字列を数字とその前後の部分に分けようとしているとします。 +次のようにしてみるかもしれません。 SELECT regexp_match('abc01234xyz', '(.*)(\d+)(.*)'); Result: {abc0123,4,xyz} + +上手くいきませんでした。最初の.*が欲張りで、可能なだけ消費してしまい、\d+は最後の可能な場所で最後の数字にマッチします。 +欲張りでなくすることで直そうとするかもしれません。 SELECT regexp_match('abc01234xyz', '(.*?)(\d+)(.*)'); Result: {abc,0,""} + +またもや上手くいきませんでした。今度は、REが全体として欲張りでなくなってしまい、できる限り早く全体に渡るマッチを終わらせてしまうからです。 +RE全体として欲張りにすることで欲しいものが得られます。 SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); Result: {abc,01234,xyz} + +REの全体に渡る欲張りさをその要素の欲張りさと別に制御すれば、可変長のパターンを非常に柔軟に扱えます。 + +マッチが長いか短いかを判断する時には、マッチの長さは照合要素ではなく文字列で測られます。 +空文字列はまったくマッチする要素がない文字列よりも長いと考えられます。 +例えば、bb*abbbcの真中の3文字とマッチし、(week|wee)(night|knights)weeknightsの全ての10文字とマッチし、abcに対して(.*).*がマッチされると、括弧内の部分正規表現は3つの文字全てにマッチし、bcに対して(a*)*がマッチされると、全体のREと括弧内の正規表現は空文字列にマッチします。 + +もし大文字小文字を区別しないマッチが指定されると、アルファベット文字の大文字小文字の区別がまったくなくなったのと同じ効果を与えます。 +ブラケット式の外側にアルファベットの大文字小文字が混ざった通常の文字が出てきた場合、例えば、x[xX]となるように大文字小文字ともにブラケット式に実質的に転換されます。 +ブラケット式の中に現れた時は、(例えば)[x][xX]となり、また[^x][^xX]となるように、全ての大文字小文字それぞれの対がブラケット式に追加されます。 + +改行を区別するマッチが指定されると、.^を使用するブラケット式は(REが明示的に改行を含まない限りマッチが行をまたがらないようにするために)改行文字にマッチしなくなります。また、^$はそれぞれ改行直後と直前の空文字列にマッチし、さらに、それぞれ文字列の先頭と末尾にマッチします。 +しかし、AREエスケープの\A\Zは、継続して、文字列の先頭と末尾のみにマッチします。 +また、文字クラス短縮形\D\Wこのモードが何であれ改行にマッチします。 +(PostgreSQL 14より前では、改行敏感モードのときはこれらは改行にマッチしませんでした。 +古い挙動で動かすには[^[:digit:]]あるいは[^[:word:]]と書いてください。) + +部分的に改行を区別するマッチが指定されると、.とブラケット式は改行を区別するマッチを行うようになりますが、^$は変更されません。 + +部分的に改行を区別する逆マッチが指定されると、^$は改行を区別するマッチを行うようになりますが、.とブラケット式は変更されません。 +これはあまり有用ではありません。対称性のために提供されています。 + + 制限と互換性 + +本実装ではREの長さに関する制限はありません。 +しかし、移植性を高めたいプログラムでは、256バイトを超えるREを使用すべきではありません。POSIX互換の実装ではそうしたREでは混乱する可能性があります。 + +AREの機能のうち、POSIX EREと実質的な非互換性があるのは、\がブラケット式の内側で特殊な意味を失わないという点のみです。 +他の全てのARE機能は、POSIX EREでは不正、未定義、未指定な効果となる構文を使用しています。決定子の***構文などはBREおよびEREのPOSIX構文にはありません。 + +多くのARE拡張はPerlから拝借したものです。 +しかし、いくつかは整理され、Perlの拡張のいくつかは存在しません。 +注意すべき非互換性には、\b\B、改行の取り扱いに関する特殊な措置の欠落、改行を区別するマッチに影響する点について補足したブラケット式の追加、括弧と先行・後方検索制約内の後方参照についての制限、最長/最短(最初にマッチするではなく)マッチのセマンティクスがあります。 + + 基本正規表現 + +BREはEREといくつかの面において異なります。 +BREにおいては、|+?は普通の文字であり、それらの機能と等価なものはありません。 +バウンドの区切りは\{\}であり、{}自身は普通の文字です。 +副式を入れ子にするための括弧は\(\)であり、()自身は普通の文字です。 +^は、REの先頭にある場合や括弧内の副式の先頭の場合を除き、普通の文字です。 +$は、REの末尾にある場合や括弧内の副式の末尾の場合を除き、普通の文字です。 +また、*はREの先頭にある場合や括弧内の副式の先頭にある場合には普通の文字になります(その前に^が付いている可能性もあります)。 +最後に、1桁の後方参照を使用することができ、また、BREにおいては、\<\>はそれぞれ[[:<:]][[:>:]]と同義です。 +その他のエスケープはBREでは使用できません。 + + 標準SQLおよびXQueryとの違い LIKE_REGEX @@ -7766,12 +10219,18 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); XQuery regular expressions + + XQuery正規表現 + + +SQL:2008以降、標準SQLには正規表現演算子と、XQuery正規表現標準に従ってパターンマッチングを実行する関数が含まれています。 LIKE_REGEX OCCURRENCES_REGEX @@ -7779,20 +10238,31 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); SUBSTRING_REGEX TRANSLATE_REGEX + +PostgreSQLは現在これらの演算子や関数を実装していません。 +に示すように、それぞれの場合でほぼ同等の機能を得ることができます。 +(この表では両側のさまざまなオプション句を省略しています。) + + 同等の正規表現関数 + + 標準SQL PostgreSQL @@ -7827,43 +10297,62 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
+ +PostgreSQLで提供されているものと同様の正規表現関数は、他の多くのSQL実装でも利用できますが、標準SQL関数はそれほど広く実装されていません。 +正規表現構文の詳細のいくつかは、実装によって異なる可能性があります。 + +標準SQLの演算子と関数は、上で述べたARE構文に極めて近いXQuery正規表現を使用しています。 +既存のPOSIXベースの正規表現機能とXQueryの正規表現の主な違いには以下のものが含まれます。 + +XQueryの文字クラス減算はサポートされていません。 +この機能の例としては、[a-z-[aeiou]]のようにして英語の子音のみにマッチさせるというのがあります。 + +XQueryの文字クラス短縮形\c\C\i\Iはサポートされていません。 + +\p{UnicodeProperty}あるいはその逆である\P{UnicodeProperty}を使ったXQueryの文字クラス要素はサポートされていません。 + +POSIXは有効なロケール(演算子あるいは関数のCOLLATE句で制御できます)にしたがい、\w参照)のような文字クラスを解釈します。 +XQueryはこれらのクラスをUnicodeの文字属性を参照してこれらのクラスを決定します。 +ですからUnicodeルールに従うロケールを使用してのみ同等の振る舞いを得ることができます。 + +標準SQL(XQuery自身ではなく)はPOSIXが提供するより多様なnewlineの亜種を提供しようとしています。 +上で述べた改行に敏感なマッチオプションはASCII NL(\n)だけを改行として考慮します。 +しかしSQLはCR (\r)、CRLF (\r\n)(Windowsスタイルの改行)、LINE SEPARATOR (U+2028)のようなUnicodeのみの文字も改行として扱うことを求めています。 +とりわけ、SQLにおいては、.\s\r\nを2文字ではなく、1文字として数える必要があります。 + +で示す文字エントリエスケープのうち、XQueryは\n\r\tだけをサポートしています。 + +XQueryはブラケット式内の文字クラスとして[:name:]構文をサポートしていません。 + +XQueryには先行検索制約および後方検索制約がありませんし、に記述された制約エスケープもありません。 + +に記述されたメタ構文形式はXQueryには存在しません。 + +XQueryで定義された正規表現フラグ文字はPOSIX()のオプション文字に関連していますが、同じではありません。 +iqオプションは同じように振る舞いますが、その他は違います。 + +XQueryのs(ピリオドが改行にマッチすることを許容する)とm^$が改行位置でマッチすることを許容する)フラグは、POSIXのnpwフラグと同じ挙動を提供しますが、POSIXのsmフラグの挙動とは一致しません。 +ピリオドが改行にマッチするのはPOSIXではデフォルトの挙動ですが、XQueryではそうでないことに留意してください。 + +XQueryのx(パターン中の空白を無視する)フラグはPOSIXの拡張モードフラグとは著しく異なります。 +POSIXのxフラグは#でパターン中のコメントを始めることもできます。 +POSIXはバックスラッシュ以降の空白文字を無視しません。 @@ -7957,15 +10481,24 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
+ + + + データ型書式設定関数 formatting + + 書式設定 + + +PostgreSQLの書式設定関数は多彩なデータ型(日付/時刻データ型、整数データ型、浮動小数点数データ型、数値データ型)を整形された文字列に変換したり、整形された文字列を特定のデータ型に変換する強力なツールの一式を提供しています。 +にこれらを列挙しています。 +これら関数は共通の呼び出し規約を踏襲しています。最初の引数は整形される値で2番目の引数は入力書式または出力書式を定義するテンプレートです。 + + 書式設定関数 + +関数 + +説明 + +例 @@ -8007,7 +10556,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); text + +与えられた書式設定にしたがってタイムスタンプを文字列に変換します。 to_char(timestamp '2002-04-20 17:31:12.66', 'HH12:MI:SS') @@ -8021,7 +10573,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); text + +与えられた書式設定にしたがって時間間隔を文字列に変換します。 to_char(interval '15h 2m 12s', 'HH24:MI:SS') @@ -8035,9 +10590,12 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); text + +与えられた書式設定にしたがって数値を文字列に変換します。integerbigintnumericrealdouble precisionで利用可能です。 to_char(125, '999') @@ -8062,7 +10620,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); date + +与えられた書式設定にしたがって文字列を日付に変換します。 to_date('05 Dec 2000', 'DD Mon YYYY') @@ -8079,7 +10640,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); numeric + +与えられた書式設定にしたがって文字列を数値に変換します。 to_number('12,454.8-', '99G999D9S') @@ -8096,9 +10660,13 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +与えられた書式設定にしたがって文字列をタイムスタンプに変換します。 +(to_timestamp(double precision)もご覧ください。) to_timestamp('05 Dec 2000', 'DD Mon YYYY') @@ -8111,16 +10679,22 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); + +to_timestampto_dateは、単純なキャストでは変換できない入力フォーマットを処理するために存在します。 +ほとんどの標準的日付および時刻のフォーマットに対しては、入力文字列を必要なデータ型に単純にキャストすれば動作し、その方がずっと簡単です。 +同様に、to_numberも標準的な数値表現に対しては不要です。 + +to_char用の出力テンプレート文字列には、値に基づいて認識され、適切に整形されたデータで置き換えられるパターンがあります。 +テンプレートパターンではない全てのテキストは単にそのままコピーされます。 +同様に、(その他の関数用の)入力テンプレート文字列では、テンプレートパターンは入力されたデータ文字列で供給される値を特定します。 +テンプレート文字列中にテンプレートパターンではない文字があれば、(テンプレート文字列の文字と同じかどうかにかかわらず)入力文字列データ中の該当文字は単にスキップされます。 + +に、日付/時刻型の値の書式に使用可能なテンプレートパターンを示します。
+ + 日付/時刻型の書式テンプレートパターン + + パターン + + 説明 HH + + 時 (01–12) HH12 + + 時 (01–12) HH24 + + 時 (00–23) MI + + 分 (00–59) SS + + 秒 (00–59) MS + + ミリ秒 (000–999) US + + マイクロ秒 (000000–999999) FF1 + + 10分の1秒 (0–9) FF2 + + 100分の1秒 (00–99) FF3 + + ミリ秒 (000–999) FF4 + + 10分の1ミリ秒 (0000–9999) FF5 + + 100分の1ミリ秒 (00000–99999) FF6 + + マイクロ秒 (000000–999999) SSSS, SSSSS + + 深夜0時からの秒数 (0–86399) + + AMamPMまたはpm + + 午前/午後の指定(ピリオドなし) + + A.M.a.m.P.M.またはp.m. + + 午前/午後の指定(ピリオドあり) Y,YYY + + カンマ付き年(4桁以上) YYYY + + 年(4桁以上) YYY + + 年の下3桁 YY + + 年の下2桁 Y + + 年の下1桁 IYYY + + ISO 8601週番号年(4桁以上) IYY + + ISO 8601週番号年の下3桁 IY + + ISO 8601週番号年の下2桁 I + + ISO 8601週番号年の下1桁 + + BCbc、 + AD、またはad + + 紀元前後の指定(ピリオドなし) + + B.C.b.c.、 + A.D.、またはa.d. + + 紀元前後の指定(ピリオド付き) MONTH + + 大文字での完全な月名(9文字になるように空白文字を埋める) Month + + 大文字で書き始める完全な月名(9文字になるように空白文字を埋める) month + + 小文字での完全な月名(9文字になるように空白文字を埋める) MON + + 大文字での短縮形の月名(英語では3文字、ローカライズ化された場合は可変長) Mon + + 大文字で書き始める短縮形の月名(英語では3文字。ローカライズ化された場合は可変長) mon + + 小文字での短縮形の月名(英語では3文字。ローカライズ化された場合は可変長) MM + + 月番号(01–12) DAY + + 大文字での完全な曜日名(9文字になるように空白文字を埋める) Day + + 大文字で書き始める完全な曜日名(9文字になるように空白文字を埋める) day + + 小文字での完全な曜日名(9文字になるように空白文字を埋める) DY + + 短縮形の大文字での短縮形の曜日名(英語では3文字。ローカライズ化された場合は可変長) Dy + + 大文字で書き始める短縮形の曜日名(英語では3文字。ローカライズ化された場合は可変長) dy + + 小文字での短縮形の曜日名(英語では3文字。ローカライズ化された場合は可変長) DDD + + 通年の日にち番号 (001–366) IDDD + + ISO 8601週番号年の日にち番号(001–371:通年 第1日は最初のISO週の月曜日) DD + + 月内の日にち番号 (01–31) D + + 曜日番号、日曜日(1)から土曜日(7)まで ID + + ISO 8601の曜日番号、月曜日(1)から日曜日(7)まで W + + 月中の週番号 (1–5)(その月の初日がある週が第1週) WW + + 年間を通じた週番号 (1–53)(元日のある週が第1週) IW + + ISO 8601週番号年の年間を通じた週番号(01–53;新年の最初の木曜日がある週が第1週) CC + + 世紀(2桁。21世紀は2001-01-01から開始) J + + ユリウス日(紀元前4714年11月24日現地時間午前零時からの整数による通算経過日。参照) Q + + 四半期 RM + + 大文字ローマ数字による月(I–XII、Iは1月) rm + + 小文字ローマ数字による月(i–xii、iは1月) TZ + + 大文字の時間帯省略形 tz + + 小文字の時間帯省略形 TZH + + time-zoneの時間 TZM + + time-zoneの分 OF + + UTCからの時間帯オフセット(HHあるいはHH:MM
+ +どのようなテンプレートパターンに対しても、その振舞いを変更するために修飾子を適用できます。 +例えば、FMMonthFM修飾子の付いたMonthパターンです。 +に、日付/時刻書式の修飾子パターンを示します。 + + 日付/時刻書式用のテンプレートパターン修飾子 + + 修飾子 + + 説明 + + + + FM接頭辞 + + 字詰めモード(先頭の0、およびを空白のパディングを無効) FMMonth + + TH接尾辞 + + 大文字による序数接尾辞 + + DDTH、例えば12TH + + th接尾辞 + + 小文字による序数接尾辞 + + DDth、例えば12th + + FX接頭辞 + + 固定書式のグローバルオプション(使用上の注意事項を参照) FX Month DD Day + + TM接頭辞 + + 翻訳モード(に基づき、ローカライズ化された曜日、月名を使います) TMMonth + + SP接尾辞 + + スペルモード(未実装) DDSP @@ -8445,11 +11283,15 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
+ +日付/時刻型書式の使用上の注意事項は次のとおりです。 + +FMは、先頭にはゼロ、末尾には空白を追加してパターンを固定長にする機能を無効にします。 +PostgreSQLでは、FMはその次に記述されたものだけを変更します。一方Oracleでは、FMはそれに続く全ての記述に対して影響し、FM修飾詞を繰り返すと、ゼロや空白を埋めるモードのオンとオフが切り替わります。 + +FMが指定されているかどうかに関わらずTMは末尾の空白を抑止します。 + +to_timestampto_dateは入力中の大文字小文字の区別を無視します。 +例えばMONMonmonはすべて同じ文字列として受け付けます。 +TM修飾子を使うと関数の入力照合順のルールにしたがって大文字小文字の変換が行われます。(参照。) + +FXオプションが使用されていない限り、to_timestampto_dateは入力文字列内最初の連続した空白と、日付と時間の値の周辺の複数の空白を無視します。 +例えば、to_timestamp('2000    JUN', 'YYYY MON')to_timestamp('2000 - JUN', 'YYYY-MON')は動作しますが、to_timestamp('2000    JUN','FXYYYY MON')はエラーを返します。 +後者のto_timestampは単一のスペースだけがあることを期待するからです。 +FXはテンプレートの第1項目として指定される必要があります。 + +FXオプションが使用されていない限り、to_timestampto_dateのテンプレート文字列中の区切り文字(空白あるいは記号文字(訳注:原文は"non-letter/non-digit character"))は入力文字中のすべての単一の区切り文字とマッチするか、あるいはマッチしない場合はスキップします。 +たとえば、to_timestamp('2000JUN', 'YYYY///MON')to_timestamp('2000/JUN', 'YYYY MON')は動作しますが、to_timestamp('2000//JUN', 'YYYY/MON')は入力文字列中の区切り文字の数がテンプレート中の区切り文字の数を上回っているため、エラーを返します。 + +FXが指定されていると、テンプレート文字列中の区切り文字は正確に入力文字列中の一文字とマッチします。 +しかし、入力文字列の文字はテンプレート文字列中の区切り文字と一致する必要はないことに注意してください。 +たとえば、to_timestamp('2000/JUN', 'FXYYYY MON')は動作しますが、to_timestamp('2000/JUN', 'FXYYYY  MON')はテンプレート文字列中の二番目の空白が入力文字列中の文字Jを消費するため、エラーを返します。 + +TZHテンプレートパターンは符号付きの数字とマッチします。 +FXオプションが無い場合、マイナス符号は曖昧で、区切り文字として解釈されるかも知れません。 +この曖昧さは次のようにして解消されます。 +テンプレート文字列中のTZHの前の区切り文字の数が入力文字列中のマイナス符号の前の区切り文字の数よりも少なければ、そのマイナス符号はTZHの一部として解釈されます。 +そうでない場合、マイナス記号が値の区切り記号と見なされます。 +たとえば、to_timestamp('2000 -10', 'YYYY TZH')では-10TZHにマッチしますが、to_timestamp('2000 -10', 'YYYY  TZH')では10TZHにマッチします。 + +to_charテンプレートには、通常のテキストを入れることができ、それはそのまま出力されます。 +部分文字列を二重引用符で括ることで、部分文字列にテンプレートパターンがあったとしても、強制的にリテラルテキストとして解釈させることができます。 +例えば、'"Hello Year "YYYY'ではYYYYは年データに置換されてしまいますが、Year内のYは置換されません。 +to_dateto_numberto_timestampでは、二重引用符で括られた文字の数だけ入力された文字をスキップします。例えば"XX"は2文字の入力文字(それがXXであるかどうかにかかわらず)をスキップします。 + +PostgreSQL 12より前では、記号文字(訳注:原文は"non-letter or non-digit")を使って入力文字列中の任意のテキストをスキップすることが可能でした。 +たとえば、to_timestamp('2000y6m1d', 'yyyy-MM-DD')は動作しました。 +現在は、この目的のために非記号文字(訳注:原文は"letter characters")だけを使うことができます。 +たとえば、to_timestamp('2000y6m1d', 'yyyytMMtDDt')to_timestamp('2000y6m1d', 'yyyy"y"MM"m"DD"d"')は、ymdをスキップします。 + + Month\"'. Backslashes are not otherwise special outside of double-quoted strings. Within a double-quoted string, a backslash causes the next character to be taken literally, whatever it is (but this has no special effect unless the next character is a double quote or another backslash). +--> +出力に二重引用符を付けたい場合、'\"YYYY Month\"'のようにその前にバックスラッシュを付けなければなりません。 +バックスラッシュは、二重引用符の外側では特別扱いされません。 +二重引用符の内側では、バックスラッシュによって次の文字が何であれ文字通りに扱われるようになります。 +(しかし、次の文字が二重引用符であるか、あるいは別のバックスラッシュでない限り、これは特別な効果をもたらしません。) + +to_timestampにおいてto_dateYYYの様に4桁未満の年書式が指定され、かつ与えられる年が4桁未満だった場合、年は2020年に最も近くなるよう調整されます。例えば、95の場合は1995年になります。 + +to_timestampおよびto_dateにおいて負の年はBCを表します。 +負の年と明示的なBCフィールドの両方を記述すると、再びADになります。 +すべての形のゼロ年はBC 1として扱われます。 + +to_timestampto_dateでは、4桁より多い年を処理する際にYYYY変換に制限があります。 +YYYYの後には数字以外の文字かテンプレートを使用しなければなりません。 +そうしないと、年は常に4桁と解釈されます。 +例えば(20000年として)、to_date('200001130', 'YYYYMMDD')は4桁の年として解釈されます。 +代わりに、to_date('20000-1130', 'YYYY-MMDD')to_date('20000Nov30', 'YYYYMonDD')のように、年の後に非数字の区切り文字を使用してください。 + +to_timestampおよびto_dateにおいてYYYYYYY、もしくはY,YYYフィールドが存在するとCC(世紀)フィールドは受け入れられますが、無視されます。 +CCYYもしくはYと共に使用されると、結果は指定された世紀のその年として計算されます。 +世紀が指定され、年が指定されないときは、その世紀の最初の年と想定されます。 + +to_timestampおよびto_dateにおいて、曜日の名前や数字(DAYDおよび関連したフィールドの型)は受け付けられますが、結果を計算するという目的においては無視されます。 +同じことは四半期(Q)フィールドにも当てはまります。 + +to_timestampおよびto_dateにおいて、 +ISO 8601週番号日は(グレゴリオ暦の日付とは異なって)以下の2つの方法のうちのひとつで指定できます。 + +年、通年の週番号、曜日番号。 +例えば、to_date('2006-42-4', 'IYYY-IW-ID')は、日付2006-10-19を返します。 +曜日番号を省略した場合、1(月曜日)と想定されます。 + +年と通年の日付番号。例えば、to_date('2006-291', 'IYYY-IDDD')2006-10-19を返します。 + +ISO 8601週番号とグレゴリオ暦日のフィールドを混在して使用して日付を構築する試みは無意味なことで、エラーの原因になります。 +ISO 8601週番号年の文脈では、、あるいは月内の日付番号は意味を持ちません。 +グレゴリオ暦の年の文脈では、ISO週番号は意味を持ちません。 + +to_dateはグレゴリオとISO週番号日のフィールドの混在を拒否しますが、to_charはそうではありません。YYYY-MM-DD (IYYY-IDDD)のような出力書式指定が有用な場合があるからです。 +しかし、IYYY-MM-DDのような書き方は避けてください。年の初めの近くで驚くべき結果になるでしょう。 +(より詳細な情報はを参照してください。) + +to_timestampにおいて、ミリ秒(MS)およびマイクロ秒(US)フィールドは小数点の後の秒の桁として使用されます。 +例えば、to_timestamp('12.3', 'SS.MS')は3ミリ秒ではなく300ミリ秒です。なぜなら変換においてこれは12 + 0.3秒と計算されるからです。 +従ってSS.MS書式に対して入力値12.312.3012.300は同じミリ秒数を指定することになります。 +3ミリ秒が必要な場合には12:003のようにしなければなりません。この時、変換において12 + 0.003 = 12.003秒と計算します。 + +もう少し複雑な例を挙げます。 +to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US')は15時間12分と2秒+20ミリ秒+1230マイクロ秒 = 2.021230秒です。 + +to_char(..., 'ID')の曜日番号付けはextract(isodow from ...)関数に一致しますが、to_char(..., 'D')の曜日番号付けはextract(dow from ...)の曜日番号付けに一致しません。 + +to_char(interval)関数は、HHHH12を12時間の時計に表示されるように整形します。 +例えば0時間と36時間はいずれも12として出力します。 +一方HH24は時間の値をそのまま出力し、intervalの値であれば23を超えることも可能です。 @@ -8726,113 +11684,197 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); + +に、数値の書式設定に使用可能なテンプレートパターンを示します。 + + 数値書式用のテンプレートパターン + + パターン + + 説明 9 + + 数字の位置(必要ないときは表示しない) 0 + + 数字の位置(必要ないときでも表示する) + + .(ピリオド) + + 小数点 + + , (カンマ) + + 千単位で区切る符号 PR + + 負の値の角括弧表示 S + + 符号付き値(ロケールを使用) L + + 通貨記号(ロケールを使用) D + + 小数点(ロケールを使用) G + + グループ区切り文字(ロケールを使用) MI + + (数値 < 0であれば)指定位置にマイナス記号 PL + + (数値 > 0であれば)指定位置にプラス記号 SG + + 指定された位置にプラス/マイナス記号 + + RNまたはrn + + ローマ数字(1から3999までの値) + + THまたはth + + 序数接尾辞 V + + 指定桁でのシフト(注意事項を参照) EEEE + + 科学技術表記法用の指数
+ +数値型書式の使用上の注意事項は次のとおりです。 + +0は、それが先頭あるいは末尾のゼロであっても必ず表示する数字の位置を指定します。 +9も数字の位置を指定しますが、先頭のゼロであればそれは空白で置換され、また末尾のゼロで字詰めモードが指定されているときは削除されます。 +(to_number()では、これら2つのパターン文字は同じ意味になります。) + +フォーマットが提供する小数点以下の桁数がフォーマットされる数値よりも少ない場合、to_char()は指定された小数点以下の桁数に数値を丸めます。 + +パターン文字SLDGはそれぞれ現在のロケールで定義された符号、通貨記号、小数点、3桁区切り文字を表します(およびを参照)。 +パターン文字のピリオドとカンマはいずれもその文字そのものを表し、ロケールとは関係なく小数点と3桁区切り文字の意味を持ちます。 + +to_char()のパターンで符号について明示的な条件付けがない場合、符号のために一桁が予約され、それは数に繋げられます(すぐ左側に置かれます)。 +Sがいくつかの9のすぐ左に置かれた場合、同様に数に繋げられます。 + +SGPL、またはMIで整形された符号は、数値と関連付けられません。 +例えば、to_char(-12, 'MI9999')'-  12'となる一方、to_char(-12, 'S9999')'  -12'となります。 +(Oracleの実装では9の前にMIが置かれてはならず、9の後にMIが置かれることを要求しています。) + +THはゼロ未満の値と小数は変換しません + +PLSG、およびTHPostgreSQLの拡張です。 + +to_numberにおいて、LあるいはTHのように非データテンプレートが使われた場合には、それがデータ文字(すなわち、数字、符号、10進小数点あるいはカンマ)でない限りテンプレートパターンにマッチするかどうかにかかわらず、該当する数分だけの入力文字がスキップされます。 +例えば、THは2つの非データ文字をスキップします。 + +Vto_charにつけると、入力値を10^n倍します。 +ここでnVに続く桁数です。 +Vto_numberにつけると、同じように割り算をします。 +Vは入力文字列または出力文字列内の暗黙の小数点の位置を示すものと考えることができます。 +to_charおよびto_numberは、小数点とVとの組み合わせをサポートしません(例えば、99.9V99とはできません)。 + +EEEE(科学技術表記)は、桁と小数点のパターンを除き、他の書式パターンや修飾子と組み合わせて使うことはできず、また必ず書式文字列の最後に位置しなければなりません(例えば、9.99EEEEは正しい表記となります)。 + +to_number()において、RNパターンはローマ数字(標準形式)を数字に変換します。 +入力では大文字と小文字が区別されないため、RNrnは同等です。 +RNは、他の書式パターンやFMを除く修飾子と組み合わせて使用することはできません。 +FMは、to_char()でのみ適用され、to_number()では無視されます。 + +すべてのテンプレートについて、その動作を変えるために、いくつかの修飾子を適用できます。 +例えば、FM99.99FM修飾子が付いた99.99パターンです。 +に、数値の書式用の修飾子パターンを示します。 + + 数値の書式用テンプレートパターン修飾子 + + 修飾子 + + 説明 + + + + FM接頭辞 + + 字詰めモード(末尾の0と空白の埋め字を無効にする) + + + TH接尾辞 + + 大文字による序数接尾辞 999TH + + th接尾辞 + + 小文字による序数接尾辞 999th @@ -8974,17 +12091,29 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
+ +に、to_char関数を使用した例をいくつか示します。 + + <function>to_char</function>の例 + + + + 結果 @@ -9154,9 +12283,13 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); + + 日付/時刻関数と演算子 + +は、日付/時刻型の値の処理で使用可能な関数を示しています。詳細は、以下の副節で説明します。 +は、(+*等の)基本的な算術演算子の振舞いを説明しています。 +書式設定関数についてはを参照してください。 +を参照して、日付/時刻データ型についての背景となっている情報に精通していなければなりません。 + +加えてで示す通常の比較演算子が日付/時刻型で利用できます。 +日付とタイムスタンプ(時間帯付きあるいは時間帯なし)はすべて互換性がありますが、時刻(時間帯付きあるいは時間帯なし)と時間間隔は同じデータ型の値同士だけが比較可能です。 +時間帯なしのタイムスタンプと時間帯付きのタイムスタンプを比較する際には、前者の値は設定パラメータで指定された時間帯にあるものと仮定され、後者の値(すでに内部的にはUTCです)と比較するためにUTCに変換されます。 +同様に、タイムスタンプと比較する際には、日付の値はTimeZone時間帯の午前零時であると見なされます。 + +以下のtimeもしくはtimestamp型の入力を受け取る関数および演算子は全て、実際には2つの種類があります。1つはtime with time zone型またはtimestamp with time zone型を取るもので、もう1つはtime without time zone型もしくはtimestamp without time zone型を取るものです。 +簡略化のため、これらの種類の違いは個別に示していません。 +また、+*演算子は可換な2項をとります(例えばdate + integerinteger + date)。こうした組み合わせは片方のみ示します。
+ + 日付/時刻演算子 + +演算子 + +説明 + +例 @@ -9219,7 +12380,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); date + +日付に日数を加算 date '2001-09-28' + 7 @@ -9233,7 +12397,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +時刻間隔を日付に加算 date '2001-09-28' + interval '1 hour' @@ -9247,7 +12414,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +日付に時刻を加算 date '2001-09-28' + time '03:00' @@ -9261,7 +12431,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +時間間隔を加算 interval '1 day' + interval '1 hour' @@ -9275,7 +12448,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +時間間隔をタイムスタンプに加算 timestamp '2001-09-28 01:00' + interval '23 hours' @@ -9289,7 +12465,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time + +時間間隔を時分に加算 time '01:00' + interval '3 hours' @@ -9303,7 +12482,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +時間間隔の符号を反転 - interval '23 hours' @@ -9317,7 +12499,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); integer + +日付を減算し、経過日数を返す date '2001-10-01' - date '2001-09-28' @@ -9331,7 +12516,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); date + +日付から日数を減算 date '2001-10-01' - 7 @@ -9345,7 +12533,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +日付から時間間隔を減算 date '2001-09-28' - interval '1 hour' @@ -9359,7 +12550,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +時分を減算 time '05:00' - time '03:00' @@ -9373,7 +12567,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time + +時分から時刻間隔を減算 time '05:00' - interval '2 hours' @@ -9387,7 +12584,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +タイムスタンプから時刻間隔を減算 timestamp '2001-09-28 23:00' - interval '23 hours' @@ -9401,7 +12601,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +時間間隔を減算 interval '1 day' - interval '1 hour' @@ -9415,9 +12618,12 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +タイムスタンプを減算(justify_hours()と同様に24時間間隔を日数に変換) timestamp '2001-09-29 03:00' - timestamp '2001-07-27 12:00' @@ -9431,7 +12637,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +時間間隔にスカラを乗算 interval '1 second' * 900 @@ -9453,7 +12662,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +時間間隔をスカラで除算 interval '1 hour' / 1.5 @@ -9465,18 +12677,30 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
+ + 日付/時刻関数演算子 + +関数 + +説明 + +例 @@ -9491,8 +12715,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +引数間の減算。日数だけでなく年と月を使用した言葉による結果を生成 age(timestamp '2001-04-10', timestamp '1957-06-13') @@ -9506,7 +12733,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +current_date(午前零時時点)から引数を減算 age(timestamp '1957-06-13') @@ -9523,8 +12753,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +現在の日付と時刻(文実行中に変化する)。を参照。 clock_timestamp() @@ -9541,7 +12774,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); date + +現在の日付。を参照 current_date @@ -9558,7 +12794,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time with time zone + +現在の時刻。を参照。 current_time @@ -9572,8 +12811,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time with time zone + +精度を限定した現在の時刻。を参照。 current_time(2) @@ -9590,8 +12832,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +現在の日付と時刻(現在のトランザクションの開始時)。を参照。 current_timestamp @@ -9605,8 +12850,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +精度を限定した現在の日付と時刻(現在のトランザクションの開始時)。を参照。 current_timestamp(0) @@ -9623,12 +12871,16 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +intervaltimestamp with timezoneに加算し、3番目の引数が指定する名前を持つタイムゾーン、または省略されている場合は現在の設定に従って、時刻と夏時間の調整を計算します。 +2つの引数を持つ形式は、timestamp with timezone+interval演算子と同じです。 date_add('2021-10-31 00:00:00+02'::timestamptz, '1 day'::interval, 'Europe/Warsaw') @@ -9642,7 +12894,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +指定した起源に合わせて指定の時間間隔に切り捨てます。を参照してください。 date_bin('15 minutes', timestamp '2001-02-16 20:38:40', timestamp '2001-02-16 20:05:00') @@ -9659,8 +12914,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); double precision + +タイムスタンプの部分フィールドの取得(extractと同じ)。を参照。 date_part('hour', timestamp '2001-02-16 20:38:40') @@ -9674,8 +12932,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); double precision + +時間間隔の部分フィールドの取得(extractと同じ)。を参照。 date_part('month', interval '2 years 3 months') @@ -9692,12 +12953,16 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +intervaltimestamp with timezoneから減算し、3番目の引数が指定する名前を持つタイムゾーン、または省略されている場合は現在の設定に従って、時刻と夏時間の調整を計算します。 +2つの引数を持つ形式は、timestamp with timezone-interval演算子と同じです。 date_subtract('2021-11-01 00:00:00+01'::timestamptz, '1 day'::interval, 'Europe/Warsaw') @@ -9714,7 +12979,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +指定された精度で切り捨て。参照。 date_trunc('hour', timestamp '2001-02-16 20:38:40') @@ -9728,8 +12996,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +指定された時間帯において指定された精度で切り捨て。参照 date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney') @@ -9743,8 +13014,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +指定された精度で切り捨て。参照。 date_trunc('hour', interval '2 days 3 hours 40 minutes') @@ -9761,7 +13035,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); numeric + +タイムスタンプの部分フィールドの取得。を参照。 extract(hour from timestamp '2001-02-16 20:38:40') @@ -9775,7 +13052,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); numeric + +時間間隔の部分フィールドの取得。を参照。 extract(month from interval '2 years 3 months') @@ -9792,7 +13072,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); boolean + +日付が有限(+/-無限でない)かどうかの検査 isfinite(date '2001-02-16') @@ -9806,7 +13089,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); boolean + +タイムスタンプが有限(+/-無限でない)かどうかの検査 isfinite(timestamp 'infinity') @@ -9820,7 +13106,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); boolean + +日付が有限(+/-無限大でない)かどうかの検査 isfinite(interval '4 hours') @@ -9837,7 +13126,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +30日周期を月単位に変換して時間間隔を調整 justify_days(interval '1 year 65 days') @@ -9854,7 +13146,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +間隔を調整し、24時間を日に変換 justify_hours(interval '50 hours 10 minutes') @@ -9871,9 +13166,12 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +justify_daysおよびjustify_hoursを使用し、さらに符号による調整を行っての時間間隔の調整 justify_interval(interval '1 mon -1 hour') @@ -9890,8 +13188,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time + +現在の時刻。を参照。 localtime @@ -9905,8 +13206,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time + +精度を限定した現在の時刻。を参照。 localtime(0) @@ -9923,8 +13227,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +現在の日付と時刻(現在のトランザクションの開始時)。を参照。 localtimestamp @@ -9938,9 +13245,12 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +精度を限定した現在の日付と時刻(現在のトランザクションの開始時)。を参照。 localtimestamp(2) @@ -9959,8 +13269,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); date + +年、月、日フィールドから日付を作成(負の年はBCを意味します) make_date(2013, 7, 15) @@ -9983,8 +13296,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); interval + +年、月、週、日、時間、分、秒フィールドから時間間隔を作成。それぞれがデフォルトでゼロになる make_interval(days => 10) @@ -10003,7 +13319,10 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); time + +時、分、秒フィールドから時刻を作成 make_time(8, 15, 23.5) @@ -10025,8 +13344,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp + +年、月、日、時、分、秒フィールドから時刻を作成(負の年はBCを意味します) make_timestamp(2013, 7, 15, 8, 15, 23.5) @@ -10049,11 +13371,16 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +年、月、日、時、分、秒フィールドから時間帯付きの時刻を作成(負の年はBCを意味する)。 +timezoneが指定されていなければ、現在の時間帯が使われる。 +例ではセッションの時間帯がEurope/Londonであると仮定。 make_timestamptz(2013, 7, 15, 8, 15, 23.5) @@ -10074,8 +13401,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +現在の日付と時刻(現在のトランザクションの開始時)。を参照。 now() @@ -10092,8 +13422,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +現在の日付と時刻(現在の文の開始時)。を参照。 statement_timestamp() @@ -10110,9 +13443,12 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); text + +現在の日付と時刻(clock_timestampと似ているが、text型文字列として返す)。を参照。 timeofday() @@ -10129,8 +13465,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +現在の日付と時刻(現在のトランザクションの開始時)。を参照。 transaction_timestamp() @@ -10147,8 +13486,11 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); timestamp with time zone + +Unixエポック時間(1970-01-01 00:00:00+00からの経過秒数)をtimestamp with time zoneに変換 to_timestamp(1284352323) @@ -10163,12 +13505,16 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}'); OVERLAPS + +これらの関数に加え、OVERLAPS SQL演算子がサポートされています。 (start1, end1) OVERLAPS (start2, end2) (start1, length1) OVERLAPS (start2, length2) + +この式は、2つの時間間隔(その両端で定義されます)が重なる時に真を返します。重ならない場合は偽を返します。 +両端は2つの日付、時刻、タイムスタンプとして、もしくは、日付/時刻/タイムスタンプとそれに続く時間間隔として指定できます。 +値の組み合わせで指定する場合、開始と終了のいずれを先に記述しても構いません。OVERLAPSは与えられた値のうち、早い方を開始として扱います。 +各時間間隔は、start <= time < endという半開区間として見なされます。ただし、startendが同じ値の場合には単一の時間点となります。 +これは、例えば端点のみが共通である2つの時間間隔は、重ならないということを意味します。 @@ -10199,6 +13551,7 @@ SELECT (DATE '2001-10-30', DATE '2001-10-30') OVERLAPS + +timestampまたはtimestamp with time zoneの値にintervalの値を加える際には(あるいはintervalの値を引く際には)、interval値の月、日、マイクロ秒のフィールドが順に適用されます。 +まず、非ゼロの月フィールドが示す日数の分だけtimestampの日付を先に進める、もしくは後に戻し、新しい月の最終日を超えてしまわない限り月内の日付を同じに保ちます。月の最後の日を超えてしまうようなら、その月の最終日が使われます。 +(たちえば、3月31日に1ヶ月を加えると4月30日になりますが、3月31日に2ヶ月を加えると5月31日になります。) +次に、日フィールド分だけtimestampの日付を先に進める、もしくは後に戻します。 +この両方の処理において、現地時刻は同じに保ちます。 +最後に、非ゼロのマイクロ秒フィールドがあれば、そのまま加算、もしくは減算します。 +DSTと認識される時間帯におけるtimestamp with time zone値の演算を行う際には、(たとえば)interval '1 day'を加算、もしくは減算することは、interval '24 hours'を加算、もしくは減算するのと同じ結果になるとは限りません。 +例えば、セッションの時間帯が America/Denverに設定されている時には以下のようになります。 SELECT timestamp with time zone '2005-04-02 12:00:00-07' + interval '1 day'; Result: 2005-04-03 12:00:00-06 SELECT timestamp with time zone '2005-04-02 12:00:00-07' + interval '24 hours'; Result: 2005-04-03 13:00:00-06 + +その理由はAmerica/Denver時間帯で2005-04-03 02:00:00に夏時間への変更され、1時間スキップされたためです。 + +異なる月では日数が異なりますのでageで返されるmonthsフィールドにはあいまいさがあります。 +PostgreSQLのやり方は月をまたがる2つの日付の計算において、日付の早いほうの月を使用します。 +例えば、age('2004-06-01', '2004-04-30')は4月を使用して1 mon 1 dayを得ます。5月は31日あり、4月は30日のため、もし5月を使用するなら結果は1 mon 2 daysとなるでしょう。 + +日付とタイムスタンプの引き算は複雑になることがあります。 +引き算をする概念的に単純な方法は、それぞれの値を秒数にEXTRACT(EPOCH FROM ...)で変換してから、結果を引き算する方法です。この結果は2つの値の間の数になります。 +これは各月の日数、時間帯の変更、夏時間の調整に対して調整されるでしょう。 +-演算子での日付やタイムスタンプの引き算は値の間の(24時間の)日数と時間/分/秒を、同様に調整して返します。 +age関数は年、月、日、時間/分/秒をフィールド毎に引き算し、負のフィールドの値を調整します。 +以下の問い合わせは上の各方法の違いを説明する例です。 +例の結果はtimezone = 'US/Eastern'で生成されました。2つの日付の間には夏時間の変更があります。 @@ -10274,7 +13653,10 @@ SELECT age(timestamptz '2013-07-01 12:00:00', timestamptz '2013-03-01 12:00:00') + + <function>EXTRACT</function>と<function>date_part</function> date_part @@ -10288,6 +13670,7 @@ EXTRACT(field FROM source) + +extract関数は、日付/時刻の値から年や時などの部分フィールドを抽出します。 +sourcetimestampdatetimeinterval型の値式でなければなりません。 +(timestampとtimeは、タイムゾーンの有無に関わらず指定できます。) +fieldはsourceの値からどのフィールドを抽出するかを選択する識別子もしくは文字列です。 +すべての入力データ型に対してすべてのフィールドが有効であるとは限りません。 +たとえば、1日より小さいフィールドはdateから抽出できませんし、1日以上のフィールドはtimeから抽出できません。 +extract関数はnumeric型の値を返します。 + +以下は有効なフィールド名です。 @@ -10312,8 +13706,12 @@ EXTRACT(field FROM source) century + +世紀。 +interval値の場合、年フィールドを100で割った値 @@ -10335,8 +13733,12 @@ SELECT EXTRACT(CENTURY FROM INTERVAL '2001 years'); day + +月内の日(1–31)。 +interval値の場合は日数 @@ -10353,7 +13755,10 @@ SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); decade + +年フィールドを10で割ったもの @@ -10367,8 +13772,11 @@ SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); dow + +日曜日(0)から土曜日(6)までの曜日 @@ -10376,9 +13784,12 @@ SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 5 + +extract関数の曜日番号はto_char(...,'D')関数のそれとは異なる点に注意してください。 @@ -10388,7 +13799,10 @@ SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); doy + +年内での通算日数(1–365/366) @@ -10402,6 +13816,7 @@ SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); epoch + +timestamp with time zone型の値においては、1970-01-01 00:00:00 UTCからの秒数(負の数はその前)。datetimestamp型の値においては、時間帯と夏時間を考慮しないローカルタイムの1970-01-01 00:00:00からの秒数。interval型の値ではその時間間隔における合計の秒数。 @@ -10422,8 +13839,11 @@ SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); + +to_timestampで経過秒数をtimestamp with time zoneに変換することができます。 SELECT to_timestamp(982384720.12); @@ -10431,11 +13851,14 @@ SELECT to_timestamp(982384720.12); + +to_timestampdateあるいはtimestampの値から取り出したエポックに適用すると、誤解を招く結果が得られるかもしれないことに注意してください。結果は実質的に元の値がUTCで与えられていると見なしますが、実際は違うかもしれません。 @@ -10444,8 +13867,11 @@ SELECT to_timestamp(982384720.12); hour + +時間フィールド(TIMESTAMPの場合は0–23、INTERVALの場合は無制限)。 @@ -10459,8 +13885,11 @@ SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); isodow + +月曜日(1)から日曜日(7)までの曜日 @@ -10468,8 +13897,12 @@ SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); Result: 7 + +日曜日を除きdowと同一です。 +これはISO 8601曜日番号付けに一致します。 @@ -10479,8 +13912,11 @@ SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); isoyear + +その日付に該当するISO 8601週番号年。 @@ -10491,11 +13927,15 @@ SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); + +すべてのISO 8601週番号年は1月4日を含む週の月曜日から開始されます。従って、1月上旬、または12月下旬でISO年がグレゴリオ年と異なる可能性があります。 +より詳細はweekフィールドを参照してください。 @@ -10504,10 +13944,15 @@ SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); julian + +日付またはタイムスタンプに対応するユリウス日。 +ローカル午前零時でないタイムスタンプは、小数値になります。 +詳細はを参照してください。 @@ -10523,8 +13968,11 @@ SELECT EXTRACT(JULIAN FROM TIMESTAMP '2006-01-01 12:00'); microseconds + +端数部分も含む秒フィールドに、1,000,000を乗じた値。秒の整数部を含むことに注意。 @@ -10538,8 +13986,12 @@ SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); millennium + +千年紀。 +interval値の場合、年フィールドを1000で割った値 @@ -10550,8 +14002,11 @@ SELECT EXTRACT(MILLENNIUM FROM INTERVAL '2001 years'); + +1900年代の年は第2ミレニアムです。第3ミレニアムは2001年1月1日から始まりました。 @@ -10560,8 +14015,11 @@ SELECT EXTRACT(MILLENNIUM FROM INTERVAL '2001 years'); milliseconds + +端数部分も含む秒フィールドに、1000を乗た値。秒の整数部を含むことに注意してください。 @@ -10575,7 +14033,10 @@ SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); minute + +分フィールド (0–59) @@ -10589,9 +14050,12 @@ SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); month + +年内の月の番号(1~12)。interval値の場合、月数を12で割った余り(0~11) @@ -10609,9 +14073,13 @@ SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); quarter + +その日付が含まれる年の四半期(1–4)。 +interval値の場合、月フィールドを3で除算して1を加算した値 @@ -10627,7 +14095,10 @@ SELECT EXTRACT(QUARTER FROM INTERVAL '1 year 6 months'); second + +端数を含んだ秒フィールド @@ -10642,11 +14113,15 @@ SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); timezone + +秒単位のUTCからの時間帯オフセット。正の値はUTCより東の時間帯に対応し、負の値はUTCより西の時間帯に対応。 +(技術的に言えば、PostgreSQLはうるう秒を制御しないためUTCを使用していない。) @@ -10655,7 +14130,10 @@ SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); timezone_hour + +時間帯オフセットの時の成分。 @@ -10664,7 +14142,10 @@ SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); timezone_minute + +時間帯オフセットの分の成分。 @@ -10673,12 +14154,18 @@ SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); week + +ISO 8601週番号。 +定義ではISO週は月曜日から始まり、その年の1月4日を含む週をその年の第1週としています。 +つまり、年の最初の木曜日がある週がその年の第1週となります。 + +ISO週番号システムでは、1月の早い日にちは前年の第52週もしくは第53週となることがあり、12月の遅い日にちには次年の最初の週の一部となることがあります。 +例えば、2005-01-01は2004年の第53週であり、2006-01-01は2005年の第52週の一部です、一方2012-12-31は2013年の第1週の一部となります。 +整合性のある結果を得るため、isoyearフィールドとweekを併用することを推奨します。 + +interval値の場合、週フィールドは単純に整数の日にちを7で除算した数値になります。 @@ -10707,8 +14201,11 @@ SELECT EXTRACT(WEEK FROM INTERVAL '13 days 24 hours'); year + +年フィールド。AD零年が存在しないことは忘れないでください。このためADの年からBCの年を減ずる時には注意が必要です。 @@ -10722,11 +14219,16 @@ SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); + +interval値を処理する場合、extract関数は、interval出力関数で使用される解釈と一致するフィールド値を生成します。 +これは、非正規化されたINTERVALでの表示から始めた場合、驚くべき結果を生じる可能性があります。 +例えば次のようになります。 SELECT INTERVAL '80 minutes'; Result: 01:20:00 @@ -10737,6 +14239,7 @@ SELECT EXTRACT(MINUTES FROM INTERVAL '80 minutes'); + +入力値が+/-無限大の場合、extractは単調増加フィールド(timestamp入力についてはepochjulianyearisoyeardecadecenturymillenniumに、interval入力についてはepochhourdayyeardecadecenturymillennium)に対し、+/-無限大を返します。 +その他のフィールドに対してはNULLが返されます。 +PostgreSQLの9.6より前のバージョンでは、入力が無限大のすべての場合に対してゼロを返していました。 + +extract関数は主に演算処理を意図しています。 +日付/時刻の値を表示する目的での書式についてはを参照してください。 + +date_part関数は伝統的なIngres上で設計されたもので、標準SQLextract関数と等価です。 date_part('field', source) + +ここでfieldパラメータが名前ではなく文字列値である必要があることに注意してください。 +date_partで有効なフィールド名はextractと同じです。 +歴史的な理由により、date_part関数はdouble precision型の結果を返します。 +場合によってはこれによって精度が失われることがあります。 +extractを代わりに使うことをお勧めします。 @@ -10790,14 +14311,18 @@ SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); + +date_trunc関数は概念的に数値に対するtrunc関数と類似しています。 date_trunc(field, source , time_zone ) + +sourceは、データ型timestamptimestamp with time zoneもしくはintervalの値式です。 +(date型とtime型の値はそれぞれ自動的にtimestampもしくはintervalにキャストされます。) +fieldは、入力値の値をどの精度で切り捨てるかを選択します。 +同様に戻り値はtimestamptimestamp with time zoneもしくはinterval型で、指定した精度より下のすべてのフィールドがゼロに設定(日と月については1に設定)されます。 + +fieldの有効値には次のものがあります。 microseconds milliseconds @@ -10832,6 +14365,7 @@ date_trunc(field, source < + +入力値がtimestamp with time zone型の値なら、特定の時間帯を考慮して切り捨てが行われます。たとえば、を切り捨てると値はその時間帯での真夜中になります。 +デフォルトでは切り捨ては現在のの設定に従いますが、別の時間帯を指定することができるようにオプションのtime_zone引数が提供されています。 +時間帯名はに記述されている方法で指定できます。 + +timestamp without time zoneあるいはintervalの入力を処理している間は時間帯は指定できません。 +これらは額面通りの値で扱われます。 + +例(現地タイムゾーンはAmerica/New_Yorkと仮定します): SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); Result: 2001-02-16 20:00:00 @@ -10873,15 +14418,19 @@ SELECT date_trunc('hour', INTERVAL '3 days 02:47:33'); + +関数date_binは、指定した原点に揃えて入力のタイムスタンプを指定した時間間隔(stride)に分類します。 date_bin(stride, source, origin) + +sourcetimestampあるいはtimestamp with time zone型の値式です。 +(date型の値はtimestampに自動キャストされます。) +strideinterval型の値式です。 +戻り値は同様に、timestampあるいはtimestamp with time zone型で、sourceが置かれた箱の開始位置に印を付けています。 + +例を示します。 SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); Result: 2020-02-11 15:30:00 @@ -10903,24 +14460,38 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 + +完全な単位(1分、1時間など)の場合は、これは類似のdate_truncの呼び出しと同じ結果を与えます。 +違いは、date_binは任意の間隔へと切り捨てられることです。 + +stride間隔はゼロより大きくなければならず、かつ月単位あるいはそれよりも大きくてはいけません。 + + <literal>AT TIME ZONE</literal>と<literal>AT LOCAL</literal> time zone conversion + + 時間帯 + 変換 + AT TIME ZONE @@ -10931,27 +14502,43 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 + +AT TIME ZONE構文を使用することにより、time stamp without time zoneからtime stamp with time zoneへ、あるいはtime with time zoneの値を異なる時間帯に変換することができます。 +にその種類を示します。
+ + <literal>AT TIME ZONE</literal>と<literal>AT LOCAL</literal>異型 + +演算子 + +説明 + +例 @@ -10963,9 +14550,12 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 timestamp with time zone + +与えられた時間帯なしタイムスタンプを指定された時間帯にあるとして時間帯ありタイムスタンプに変換します。 timestamp '2001-02-16 20:38:40' at time zone 'America/Denver' @@ -10979,9 +14569,12 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 timestamp with time zone + +与えられた時間帯なしタイムスタンプをセッションのTimeZone値の時間帯を持つ時間帯ありタイムスタンプに変換します。 timestamp '2001-02-16 20:38:40' at local @@ -10995,9 +14588,12 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 timestamp without time zone + +与えられた時間帯付きタイムスタンプを、時刻がその時間帯にあるものとして時間帯なしタイムスタンプに変換します。 timestamp with time zone '2001-02-16 20:38:40-05' at time zone 'America/Denver' @@ -11011,9 +14607,12 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 timestamp without time zone + +与えられた時間帯ありタイムスタンプをセッションのTimeZone値の時間帯にあるとして時間帯なしタイムスタンプに変換します。 timestamp with time zone '2001-02-16 20:38:40-05' at local @@ -11027,9 +14626,13 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 time with time zone + +与えられた時間帯付き時刻を新しい時間帯に変換します。 +日付が指定されないので、現在の有効なUTCオフセットを目的の時間帯のために使用します。 time with time zone '05:34:17-05' at time zone 'UTC' @@ -11043,12 +14646,19 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0 time with time zone + +与えられた時刻with time zoneを新しい時間帯に変換します。 +日付が与えられていないので、セッションのTimeZone値に現在有効なUTCオフセットを使用します + +セッションのTimeZoneUTCに設定されていると仮定します。 time with time zone '05:34:17-05' at local @@ -11060,6 +14670,7 @@ SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-0
+ +これらの式では、設定する時間帯zoneは、('America/Los_Angeles'のような)テキスト値、または(INTERVAL '-08:00'のような)時間間隔で指定することができます。 +テキストの場合、に示した方法で時間帯名称を指定することができます。 +時間間隔を使うのはUTCからの固定のオフセットを持つ時間帯でのみ有用なので、一般的に非常に有用であるとは言えません。 + +構文AT LOCALは、AT TIME ZONE localの省略形として使用できます。 +ここで、localはセッションのTimeZone値です。 + +以下に例を示します(現在の時間帯()をAmerica/Los_Angelesと想定しています)。 SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'America/Denver'; Result: 2001-02-16 19:38:40-08 @@ -11093,6 +14715,7 @@ SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE '+05'; SELECT TIME WITH TIME ZONE '20:38:40-05' AT LOCAL; Result: 17:38:40 + +最初の例は、時間帯のない値に時間帯を追加し、現在のTimeZone設定を使ってその値を表示します。 +2番目の例は、time stamp with time zone値を指定した時間帯に変換し、その値をwithout a time zoneで返しています。 +これは、TimeZone設定とは異なる値の格納と表示を可能にします。 +3番目の例は、東京時間をシカゴ時間に変換します。 +4番目の例は、タイムスタンプをTimeZone設定で指定された現在のタイムゾーンにシフトし、タイムゾーンなしで値を返します。 +5番目の例は、およびで説明されているように、POSIX様式のタイムゾーン指定の記号がISO-8601日時リテラルの記号とは反対の意味を持つことを示しています。 + +第6の例は警告を含みます。 +入力値に日付が関連付けられていないため、変換はセッションの現在の日付を使用して行われます。 +したがって、この静的な例は、'America/Los_Angeles'がサマータイムを使用しているため、表示される年の時期によっては誤った結果を示す可能性があります。 + +関数timezone(zone, timestamp)は、SQL準拠の構文timestamp AT TIME ZONE zoneと等価です。 + +関数timezone(zone, time)は、SQL準拠の構文time AT TIME ZONE zoneと等価です。 + +関数timezone(timestamp)は、SQL準拠の構文timestamp AT LOCALと等価です。 + +関数timezone(time)は、SQL準拠の構文time AT LOCALと等価です。 + + 現在の日付/時刻 date current + + 日付 + 現在 + time current + + 時刻 + 現在 + + +PostgreSQLは、現在の日付時刻に関した値を返す多くの関数を提供します。 +これらの標準SQL関数はすべて、現在のトランザクションの開始時刻に基づいた値を返します。 CURRENT_DATE CURRENT_TIME @@ -11175,13 +14837,17 @@ LOCALTIMESTAMP(precision) + +CURRENT_TIMEおよびCURRENT_TIMESTAMP関数では、時間帯を伴う値を扱います。一方、LOCALTIMEおよびLOCALTIMESTAMP関数では、時間帯を伴わない値を扱います。 + +CURRENT_TIMECURRENT_TIMESTAMPLOCALTIME、およびLOCALTIMESTAMP関数では、精度のパラメータをオプションで取ることができ、それに合わせて秒フィールドの端数桁を丸める結果をもたらします。 +精度のパラメータがない場合、結果は使用可能な最大精度で出力されます。 + +例を示します。 SELECT CURRENT_TIME; Result: 14:39:53.662522-05 @@ -11209,6 +14881,7 @@ SELECT LOCALTIMESTAMP; + +これらの関数は現在のトランザクションの開始時刻を返すため、その値はトランザクションが実行されている間は変化しません。 +これは仕様であると考えられており、その意図は、単一のトランザクションが一貫性のある現在時刻の概念を持ち、同一トランザクション内の複数の変更が同一のタイムスタンプを持つようにすることにあります。 + +他のデータベースシステムでは、これらの値をより頻繁に増加させることがあります。 + +PostgreSQLはまた、関数を呼び出した時の実際の現在時刻や現在の文の開始時刻を返す関数も提供します。 +非標準SQLの時間関数の全一覧を以下に示します。 transaction_timestamp() statement_timestamp() @@ -11240,6 +14923,7 @@ now() + +transaction_timestamp()CURRENT_TIMESTAMPと等価ですが、明確に何を返すかを反映する名前になっています。 +statement_timestamp()は現在の文の実行開始時刻を返すものです(より具体的にいうと、直前のコマンドメッセージをクライアントから受け取った時刻です)。 +statement_timestamp()およびtransaction_timestamp()はトランザクションの最初の文では同じ値を返しますが、その後に引き続く文では異なる可能性があります。 +clock_timestamp()は実際の現在時刻を返しますので、その値は単一のSQL文であっても異なります。 +timeofday()PostgreSQLの歴史的な関数です。 +clock_timestamp()同様、実際の現在時刻を返しますが、timestamp with time zone型の値ではなく、整形されたtext文字列を返します。now()transaction_timestamp()と同じもので、伝統的なPostgreSQL関数です。 + +すべての日付/時刻型はまた、特殊なリテラル値 nowを受け付け、これは現在の日付と時刻(ここでも、トランザクションの開始時刻として解釈されます)を表します。 +したがって、下記の3つの実行結果は全て同じものとなります。 SELECT CURRENT_TIMESTAMP; SELECT now(); @@ -11274,6 +14969,7 @@ SELECT TIMESTAMP 'now'; -- but see tip below + +たとえばテーブルの列にDEFAULT句を指定するのに、後から評価される値を指定する際に3番目の形式は使わないでください。 +システムはnowという定数を解析すると、すぐにそれをtimestampに変換するので、デフォルト値が必要が時には、テーブルが作成された時刻が使われます。 +最初の2つの形式は関数呼び出しなので、デフォルト値が使用されるまで評価されません。 +ですから、これらの関数は列の挿入時間をデフォルトとする、望ましい振舞いをします。 +(も見てください。) + + 遅延実行 pg_sleep @@ -11303,19 +15008,29 @@ SELECT TIMESTAMP 'now'; -- but see tip below sleep + + 休止 + delay + + 遅延 + + +以下の関数は、サーバプロセスの実行を遅延させるために使用可能です。 pg_sleep ( double precision ) pg_sleep_for ( interval ) pg_sleep_until ( timestamp with time zone ) + +pg_sleepは、指定された秒数が経過するまで、現在のセッションのプロセスを休止させます。 +小数秒の遅延を指定することができます。 +pg_sleep_forintervalでより長い休止時間を指定する便利な関数です。 +pg_sleep_untilは特定の起床時刻が望まれる場合に便利な関数です。 +以下に例を示します。 SELECT pg_sleep(1.5); @@ -11334,20 +15055,30 @@ SELECT pg_sleep_until('tomorrow 03:00'); + +休止時間の有効な分解能はプラットフォームに依存します。0.01秒が一般的な値です。 +休止による遅延は最短で指定した時間と同じになります。 +サーバの負荷などが要因となり、より長くなる可能性があります。 +特に、pg_sleep_untilは指定した時刻ちょうどに起床する保証はありませんが、それより早く起床することはありません。 + +pg_sleepまたはその亜種を呼び出す時、セッションが必要以上のロックを保持していないことを確実にしてください。 +さもないと、他のセッションが休止中のプロセスを待機しなければならないかもしれません。そのためシステム全体の速度が低下することになるかもしれません。 @@ -11356,14 +15087,22 @@ SELECT pg_sleep_until('tomorrow 03:00'); + + 列挙型サポート関数 + +列挙型(で解説)に対し、特に列挙型の値をハードコーディングせず簡潔なプログラミングを可能にするいくつかの関数があります。 +それらの関数はで一覧されています。 +例は以下のようにして列挙型が作成されていることを想定しています。 CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple'); @@ -11372,18 +15111,30 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + + 列挙型サポート関数 + +関数 + +説明 + +例 @@ -11398,7 +15149,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple anyenum + +入力列挙型の最初の値を返します。 enum_first(null::rainbow) @@ -11414,7 +15168,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple anyenum + +入力列挙型の最後の値を返します。 enum_last(null::rainbow) @@ -11430,7 +15187,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple anyarray + +入力列挙型の全ての値を順序付き配列として返します。 enum_range(null::rainbow) @@ -11443,12 +15203,18 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple anyarray + +与えられた2つの列挙型値の範囲を、順序配列として返します。 +値は同一の列挙型に拠らなければなりません。 +1番目のパラメータがNULLの場合、結果は列挙型の最初の値から始まります。 +2番目のパラメータがNULLの場合、結果は列挙型の最後の値で終わります。 enum_range('orange'::rainbow, 'green'::rainbow) @@ -11468,19 +15234,28 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
+ +enum_rangeの2引数の形式を除き、これらの関数は、渡された特定の値を無視することに注意してください。関数は宣言されたデータ型のみ配慮します。 +その型のNULLまたは特定の値を渡すことができ、同一の結果が得られます。 +例で使われているような直書きした型名に対してではなく、テーブル列もしくは関数引数にこれらの関数を適用することがより一般的です。
+ + 幾何関数と演算子 + +pointboxlseglinepathpolygon、およびcircle幾何データ型には、PostgreSQLが元々サポートしている関数と演算子が豊富に揃っています(、およびを参照してください)。 + + 幾何データ演算子 + +演算子 + +説明 + +例 @@ -11514,10 +15303,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple geometric_type + +最初の引数の各々の点に二番目のpointの座標を加え、平行移動します。 +pointboxpathcircleで利用可能です。 box '(1,1),(0,0)' + point '(2,0)' @@ -11531,7 +15324,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple path + +2つの開経路を結合します。(どちらかの経路が閉じていればNULLを返します。) path '[(0,0),(1,1)]' + path '[(2,2),(3,3),(4,4)]' @@ -11545,10 +15341,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple geometric_type + +最初の引数の各々の点に二番目のpointの座標を減算し、平行移動します。 +pointboxpathcircleで利用可能です。 box '(1,1),(0,0)' - point '(2,0)' @@ -11562,6 +15362,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple geometric_type + +最初の引数の各々の点に2番目のpointの座標を乗じます。(点を実数部と虚数部で表現する複素数として扱い、標準複素乗法を行います。) +2番目のpointをベクトルと解釈すると、これはオブジェクトの大きさと原点からの距離をベクトルの長さで拡大し、x軸に対する角度分原点周りで反時計方向に回転させたものになります。 +pointbox +boxをこれらの演算子で回転してもその頂点を動かすだけです。 +原点に対して矩形の辺は平行のままです。ですから矩形の大きさは保存されません。真の回転ならば保存します。 +pathcircleで利用可能です。 path '((0,0),(1,0),(1,1))' * point '(3.0,0)' @@ -11593,6 +15401,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple geometric_type + +最初の引数の各々の点を2番目のpointの座標で除算します。(点を実数部と虚数部で表現する複素数として扱い、標準複素除法を行います。 +2番目のpointをベクトルと解釈すると、これはオブジェクトの大きさと原点からの距離をベクトルの長さで縮小し、x軸に対する角度分原点周りで時計方向に回転させたものになります。 +pointboxpathcircleで利用可能です。 path '((0,0),(1,0),(1,1))' / point '(2.0,0)' @@ -11621,8 +15434,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +全長を計算します。lsegpathで利用可能です。 @-@ path '[(0,0),(1,0),(1,1)]' @@ -11636,9 +15452,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +中心点を計算します。 +boxlsegpolygoncircleで利用可能です。 @@ box '(2,2),(0,0)' @@ -11652,8 +15472,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple integer + +点の数を返します。 +pathpolygonで利用可能です。 # path '((1,0),(0,1),(-1,0))' @@ -11667,8 +15491,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +交点を計算します。交点がなければNULLを返します。 +lseglineで利用可能です。 lseg '[(0,0),(1,1)]' # lseg '[(1,0),(0,1)]' @@ -11682,7 +15510,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple box + +2つの矩形の共通部を計算します。 +共通部がなければNULLを返します。 box '(2,2),(-1,-1)' # box '(1,1),(-2,-2)' @@ -11696,8 +15528,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +最初のオブジェクトから2番目のオブジェクトへの2番目のオブジェクト上の最近点を計算します。 +以下の型の対で利用可能です。 (point, box), (point, lseg), (point, line), @@ -11717,6 +15553,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +オブジェクト間の距離を計算します。 +7つのすべての幾何型、pointと他のすべての幾何型との組み合わせ、そして次の型の組み合わせで利用できます。 +(boxlseg)、(lsegline)、(polygoncircle)(そして可換の組み合わせ)。 circle '<(0,0),1>' <-> circle '<(5,0),1>' @@ -11738,6 +15579,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトを含んでいるか? +次の型の組み合わせで利用できます。 + (boxpoint)、 + (boxbox)、 + (pathpoint)、 + (polygonpoint)、 + (polygonpolygon)、 + (circlepoint)、 + (circlecircle)。 circle '<(0,0),2>' @> point '(1,1)' @@ -11760,6 +15612,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトに含まれているかあるいはその上にあるか? +次の型の組み合わせで利用できます。 + (pointbox)、 + (pointlseg)、 + (pointline)、 + (pointpath)、 + (pointpolygon)、 + (pointcircle)、 + (boxbox)、 + (lsegbox)、 + (lsegline)、 + (polygonpolygon)、 + (circlecircle)。 point '(1,1)' <@ circle '<(0,0),2>' @@ -11786,9 +15653,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +これらのオブジェクトは重なり合っているか? +(共通の点があれば真となります。) +boxpolygoncircleで利用可能です。 box '(1,1),(0,0)' && box '(2,2),(0,0)' @@ -11802,9 +15674,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは完全に2番目のオブジェクトの左にあるか? +pointboxpolygoncircleで利用可能です。 circle '<(0,0),1>' << circle '<(5,0),1>' @@ -11818,9 +15694,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは完全に2番目のオブジェクトの右にあるか? +pointboxpolygoncircleで利用可能です。 circle '<(5,0),1>' >> circle '<(0,0),1>' @@ -11834,9 +15714,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトの右にはみ出していないか? +boxpolygoncircleで利用可能です。 box '(1,1),(0,0)' &< box '(2,2),(0,0)' @@ -11850,9 +15734,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトの左にはみ出していないか? +boxpolygoncircleで利用可能です。 box '(3,3),(0,0)' &> box '(2,2),(0,0)' @@ -11866,9 +15754,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは完全に2番目のオブジェクトの下にあるか? +pointboxpolygoncircleで利用可能です。 box '(3,3),(0,0)' <<| box '(5,5),(3,4)' @@ -11882,9 +15774,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは完全に2番目のオブジェクトの上にあるか? +pointboxpolygoncircleで利用可能です。 box '(5,5),(3,4)' |>> box '(3,3),(0,0)' @@ -11898,9 +15794,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトの上にはみ出していないか? +boxpolygoncircleで利用可能です。 box '(1,1),(0,0)' &<| box '(2,2),(0,0)' @@ -11914,9 +15814,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトの下にはみ出していないか? +boxpolygoncircleで利用可能です。 box '(3,3),(0,0)' |&> box '(2,2),(0,0)' @@ -11930,7 +15834,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトの下か? +(辺が接しているのを許容します) box '((1,1),(0,0))' <^ box '((2,2),(1,1))' @@ -11944,7 +15852,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のオブジェクトは2番目のオブジェクトの上か? +(辺が接しているのを許容します) box '((2,2),(1,1))' >^ box '((1,1),(0,0))' @@ -11958,6 +15870,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +これらのオブジェクトは交差しているか? +次の型の組み合わせで利用できます。 + (boxbox)、 + (lsegbox)、 + (lseglseg)、 + (lsegline)、 + (linebox)、 + (lineline)、 + (pathpath)。 lseg '[(-1,0),(1,0)]' ?# box '(2,2),(-2,-2)' @@ -11984,7 +15907,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +線は水平か? ?- lseg '[(-1,0),(1,0)]' @@ -11998,7 +15924,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +点は水平に並んでいるか? +(つまりy座標が同じであるということです。) point '(1,0)' ?- point '(0,0)' @@ -12016,7 +15946,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +線は垂直か? ?| lseg '[(-1,0),(1,0)]' @@ -12030,7 +15963,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +点は垂直に並んでいるか? +(つまりx座標が同じであるということです。) point '(0,1)' ?| point '(0,0)' @@ -12048,7 +15985,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +(指定された)2つの線は垂直か? lseg '[(0,0),(0,1)]' ?-| lseg '[(0,0),(1,0)]' @@ -12066,7 +16006,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +線は平行か? lseg '[(-1,0),(1,0)]' ?|| lseg '[(-1,2),(1,2)]' @@ -12080,9 +16023,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +オブジェクトは同じか? +pointboxpolygoncircleで利用可能です。 polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' @@ -12095,6 +16042,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + +同じを示す~=演算子はpointboxpolygon、およびcircle型に対し通常の等価概念を示すことに注意してください。これらのいくつかの型は=演算子を持ちますが、=面積の等しさのみを比較します。これらの型で利用可能であれば、その他のスカラ比較演算子(<=など)は同様に面積を比較します。 + +PostgreSQLの14より前では、点の下/上の厳密比較演算子point <<| pointおよびpoint |>> pointは、それぞれ<^および>^という名前でした。 +これらの名前はまだ利用できますが、削除予定であり最終的にはなくなるでしょう。
+ + 幾何データ型関数 + +関数 + +説明 + +例 @@ -12144,11 +16110,17 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +面積を計算します。 +boxpathcircleで利用可能です。 +入力pathは閉じていなければなりません。さもなければNULLが返ります。 +またpathが自分自身と交わっていれば、結果は無意味なものになります。 area(box '(2,2),(0,0)') @@ -12165,8 +16137,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +中心点を計算します。 +boxcircleで利用可能です。 center(box '(1,2),(0,0)') @@ -12183,8 +16159,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple lseg + +矩形の対角線を線分として取り出します。 +(lseg(box)と同じです。) diagonal(box '(1,2),(0,0)') @@ -12201,7 +16181,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +円の直径を計算します。 diameter(circle '<(0,0),2>') @@ -12218,7 +16201,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +矩形の高さを計算します。 height(box '(1,2),(0,0)') @@ -12235,7 +16221,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +閉経路か? isclosed(path '((0,0),(1,1),(2,0))') @@ -12252,7 +16241,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +開経路か? isopen(path '[(0,0),(1,1),(2,0)]') @@ -12269,8 +16261,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +全長を計算します。 +lsegpathで利用可能です。 length(path '((-1,0),(1,0))') @@ -12287,8 +16283,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple integer + +点の数を返します。 +pathpolygonで利用可能です。 npoints(path '[(0,0),(1,1),(2,0)]') @@ -12305,7 +16305,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple path + +経路を閉じた状態に変換します。 pclose(path '[(0,0),(1,1),(2,0)]') @@ -12322,7 +16325,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple path + +経路を開いた状態に変換します。 popen(path '((0,0),(1,1),(2,0))') @@ -12339,7 +16345,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +円の半径を計算します。 radius(circle '<(0,0),2>') @@ -12356,7 +16365,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +2つの点で描いた直線の傾きを計算します。 slope(point '(0,0)', point '(2,1)') @@ -12373,7 +16385,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple double precision + +矩形の幅を計算します。 width(box '(1,2),(0,0)') @@ -12385,18 +16400,30 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
+ + 幾何型変換関数 + +関数 + +説明 + +例 @@ -12411,7 +16438,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple box + +円に内接する矩形を計算します。 box(circle '<(0,0),2>') @@ -12425,7 +16455,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple box + +点を空の矩形に変換します。 box(point '(1,0)') @@ -12439,7 +16472,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple box + +2つの対角する点を矩形に変換します。 box(point '(0,1)', point '(1,0)') @@ -12453,7 +16489,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple box + +多角形の外接矩形を計算します。 box(polygon '((0,0),(1,1),(2,0))') @@ -12470,7 +16509,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple box + +2つの矩形の外接矩形を計算します。 bound_box(box '(1,1),(0,0)', box '(4,4),(3,3)') @@ -12487,7 +16529,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple circle + +矩形を含む最小の円を計算します。 circle(box '(1,1),(0,0)') @@ -12501,7 +16546,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple circle + +中心と半径から円を作成します。 circle(point '(0,0)', 2.0) @@ -12515,9 +16563,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple circle + +多角形を円に変換します。 +円の中心は多角形の点の位置の平均で、半径は中心から多角形の点の平均距離です。 circle(polygon '((0,0),(1,3),(2,0))') @@ -12534,7 +16586,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple line + +2点を通過する直線に変換します。 line(point '(-1,0)', point '(1,0)') @@ -12551,7 +16606,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple lseg + +矩形の対角線を線分として取り出します。 lseg(box '(1,0),(-1,0)') @@ -12565,7 +16623,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple lseg + +2つの点から線分を作ります。 lseg(point '(-1,0)', point '(1,0)') @@ -12582,7 +16643,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple path + +同じ点のリストで多角形を閉経路に変換します。 path(polygon '((0,0),(1,1),(2,0))') @@ -12599,7 +16663,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +座標から点を作ります。 point(23.4, -44.5) @@ -12613,7 +16680,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +矩形の中心点を計算します。 point(box '(1,0),(-1,0)') @@ -12627,7 +16697,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +円の中心点を計算します。 point(circle '<(0,0),2>') @@ -12641,7 +16714,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +線分の中心を計算します。 point(lseg '[(-1,0),(1,0)]') @@ -12655,8 +16731,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple point + +多角形の中心を計算します。 +(多角形の点の位置の平均です。) point(polygon '((0,0),(1,1),(2,0))') @@ -12673,7 +16753,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple polygon + +矩形を4点の多角形に変換します。 polygon(box '(1,1),(0,0)') @@ -12687,7 +16770,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple polygon + +円を12点の多角形に変換します。 polygon(circle '<(0,0),2>') @@ -12701,7 +16787,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple polygon + +円をn点の多角形に変換します。 polygon(4, circle '<(3,0),1>') @@ -12715,7 +16804,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple polygon + +同じ点のリストで閉経路を多角形に変換します。 polygon(path '((0,0),(1,1),(2,0))') @@ -12728,6 +16820,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
+ +あたかもpointは添字0、1を有する配列であるかのように、pointの2つの構成要素にアクセスすることができます。 +例えば、t.ppoint列の場合、SELECT p[0] FROM tという式でX座標を抽出できます。また、UPDATE t SET p[1] = ...でY座標を変更できます。 +同様に、box型またはlseg型の値も、2つのpoint型の値の配列のように扱えます。
+ + ネットワークアドレス関数と演算子 + +IPネットワークアドレス型であるcidrinetに示す通常の比較演算子に加え、で示す特定目的の演算子と関数をサポートしています。 + +すべてのcidr値は暗黙的にinetにキャストできます。ですから以下で示すinetで使える演算子と関数はcidrでも使えます。 +(inetcidr用の別々の関数があるのは、この両者で振る舞いが異なっているべきである場合があるからです。) +またinet値をcidrにキャストすることが許されています。 +これが行われると、ネットマスクの右側のすべてのビットは有効なcidr値を作るために暗黙的にゼロになります。 + + IPアドレス演算子 + +演算子 + +説明 + +例 @@ -12787,11 +16908,16 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +サブネットが完全にサブネットに含まれているか? +この演算子と次の4つの演算子はサブネットの包含をテストします。 +それらは2つのアドレスのネットワーク部分だけを考慮し(ネットマスクの右のビットは無視されます)、ネットワークが他のネットワークと同一か、あるいはサブネットであるかどうかを決定します。 inet '192.168.1.5' << inet '192.168.1/24' @@ -12813,7 +16939,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +サブネットがサブネットに含まれているか、あるいは同じか? inet '192.168.1/24' <<= inet '192.168.1/24' @@ -12827,7 +16956,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +サブネットが完全にサブネットを含んでいるか? inet '192.168.1/24' >> inet '192.168.1.5' @@ -12841,7 +16973,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +サブネットがサブネットを含んでいるか、あるいは同じか? inet '192.168.1/24' >>= inet '192.168.1/24' @@ -12855,7 +16990,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +サブネットが他を含んでいるか、あるいは同じか? inet '192.168.1/24' && inet '192.168.1.80/28' @@ -12873,7 +17011,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +ビット否定を計算します。 ~ inet '192.168.1.6' @@ -12887,7 +17028,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +ビット積を計算します。 inet '192.168.1.6' & inet '0.0.0.255' @@ -12901,7 +17045,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +ビット和を計算します。 inet '192.168.1.6' | inet '0.0.0.255' @@ -12915,7 +17062,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +オフセットをアドレスに加算します。 inet '192.168.1.6' + 25 @@ -12929,7 +17079,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +オフセットをアドレスに加算します。 200 + inet '::ffff:fff0:1' @@ -12943,7 +17096,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +アドレスからオフセットを減算します。 inet '192.168.1.43' - 36 @@ -12957,7 +17113,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple bigint + +2つのアドレスの差を計算します。 inet '192.168.1.43' - inet '192.168.1.19' @@ -12973,18 +17132,30 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
+ + IPアドレス関数 + +関数 + +説明 + +例 @@ -12999,11 +17170,15 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +表示用テキスト省略形を作成します。 +(結果はinet出力関数が生成するものと同じです。明示的にtextにキャストしたもの(歴史的な理由でネットマスク部分が抑止されていません)と比べると省略されているだけです。 abbrev(inet '10.1.0.0/32') @@ -13017,10 +17192,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +表示用テキスト省略形を作成します。 +(ネットマスクの右側のすべてのゼロオクテットを削除することによって省略形にします。に他の例があります。) abbrev(cidr '10.1.0.0/16') @@ -13037,7 +17216,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +アドレスのネットワーク部のネットワークブロードキャストアドレスを計算します。 broadcast(inet '192.168.1.5/24') @@ -13054,8 +17236,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple integer + +アドレスファミリーを返します。IPv4なら4で、IPv6なら6です。 family(inet '::1') @@ -13072,7 +17257,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +IPアドレスをテキストとして返します。ネットマスクは無視されます。 host(inet '192.168.1.0/24') @@ -13089,7 +17277,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +アドレスのネットワークに対するホストマスクを計算します。 hostmask(inet '192.168.23.20/30') @@ -13106,7 +17297,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple cidr + +与えられたネットワークを両方含む最小のネットワークを計算します。 inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24') @@ -13123,7 +17317,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +アドレスが同じIPファミリーに属しているかどうかを判定します。 inet_same_family(inet '192.168.1.5/24', inet '::1') @@ -13140,7 +17337,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple integer + +ネットマスクのビット長を返します。 masklen(inet '192.168.1.5/24') @@ -13157,7 +17357,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +アドレスのネットワークに対するネットワークマスクを計算します。 netmask(inet '192.168.1.5/24') @@ -13174,9 +17377,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple cidr + +ネットマスクの右側をすべてゼロにしてアドレスのネットワーク部を返します。 +(これは値をcidrにキャストするのと同じです。) network(inet '192.168.1.5/24') @@ -13193,8 +17400,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple inet + +ネットマスク長をinet値に設定します。 +アドレスの部分は変更しません。 set_masklen(inet '192.168.1.5/24', 16) @@ -13208,8 +17419,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple cidr + +ネットマスク長をcidr値に設定します。 +新しいネットマスクの右側のアドレスビットは0に設定されます。 set_masklen(cidr '192.168.1.0/24', 16) @@ -13226,8 +17441,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +省略形ではないIPアドレスとネットマスク長をテキストとして返します。 +(これはtextに明示的にキャストするのと同じ効果があります。) text(inet '192.168.1.5') @@ -13240,13 +17459,17 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + +関数abbrevhost、およびtext、は主として、代替のIPアドレスの整形表示を提供する目的のものです。 + +MACアドレス型であるmacaddrmacaddr8は、で示す通常の比較演算子とで示す特定目的のための関数をサポートします。 +加えて上記のIPアドレス用に示したのと同様に、ビットごとの論理演算子~&|(NOT、AND、OR)をサポートします。
+ + MACアドレス関数 + +関数 + +説明 + +例 @@ -13284,9 +17522,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple macaddr + +アドレスの終わりの3バイトをゼロに設定します。 +残りの前の部分は(PostgreSQLには含まれないデータを使って)特定の製造業者に関連付けることもできます。 trunc(macaddr '12:34:56:78:90:ab') @@ -13300,9 +17542,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple macaddr8 + +アドレスの終わりの5バイトをゼロに設定します。 +残りの前の部分は(PostgreSQLには含まれないデータを使って)特定の製造業者に関連付けることもできます。 trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') @@ -13319,8 +17565,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple macaddr8 + +7番目のビットを1にし、修正EUI-64と呼ばれる形式にして、IPv6アドレスに含められるようにします。 macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef') @@ -13335,19 +17584,31 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + + テキスト検索関数と演算子 full text search functions and operators + + 全文テキスト検索 + 関数と演算子 + text search functions and operators + + テキスト検索 + 関数と演算子 + + +およびは全文検索用に提供されている関数と演算子を要約しています。PostgreSQLのテキスト検索機能の詳細はを参照してください。
+ + テキスト検索演算子 + +演算子 + +説明 + +例 @@ -13385,8 +17660,12 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +tsvectortsqueryの条件に合うか? +(引数は任意の順で与えることができます。) to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat') @@ -13400,8 +17679,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +テキスト文字列はto_tsvector()の暗黙的な呼び出し後にtsqueryの条件に合うか? 'fat cats ate rats' @@ to_tsquery('cat & rat') @@ -13415,9 +17697,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +2つのtsvectorを連結します。 +両方の入力が語彙素の位置を含んでいるなら2番目の入力の位置はそれにしたがって調整されます。 'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector @@ -13431,8 +17717,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +2つのtsqueryの論理積を取り、両方の入力問い合わせにマッチする文書にマッチする問い合わせを生成します。 'fat | rat'::tsquery && 'cat'::tsquery @@ -13446,8 +17735,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +2つのtsqueryの論理和を取り、どちらかの入力問い合わせにマッチする文書にマッチする問い合わせを生成します。 'fat | rat'::tsquery || 'cat'::tsquery @@ -13461,8 +17753,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +tsqueryの否定を取り、入力問い合わせにマッチしない文書にマッチする問い合わせを生成します。 !! 'cat'::tsquery @@ -13476,8 +17771,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +2つの入力問い合わせが連続する語彙素にマッチする場合にマッチする語句問い合わせを作成します。 to_tsquery('fat') <-> to_tsquery('rat') @@ -13491,9 +17789,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のtsqueryは2番目を含んでいるか? +(これは結合演算子を無視して、単に一方の問い合わせ中のすべての語彙素が他方に現れるかどうかだけを考慮します。) 'cat'::tsquery @> 'cat & rat'::tsquery @@ -13507,9 +17809,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple boolean + +最初のtsqueryは2番目に含まれているか? +(これは結合演算子を無視して、単に一方の問い合わせ中のすべての語彙素が他方に現れるかどうかだけを考慮します。) 'cat'::tsquery <@ 'cat & rat'::tsquery @@ -13525,27 +17831,43 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
+ +表に示された演算子に加え、で示す通常の比較演算子型tsvectorおよびtsqueryに対して利用できます。 +これらはテキスト検索に対してそれほど有用ではありませんが、例えばこれらの型の列に一意インデックスを作成することを可能にします。 + + テキスト検索関数 + +関数 + +説明 + +例 @@ -13560,10 +17882,15 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +文字列の配列をtsvectorに変換します。 +与えられた文字列はそれ以上処理せずに語彙素としてそのまま使用されます。 +配列要素は空文字列やNULLであってはなりません。 array_to_tsvector('{fat,cat,rat}'::text[]) @@ -13580,8 +17907,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple regconfig + +(で設定された)現在のテキスト検索設定のOIDを返します。 get_current_ts_config() @@ -13598,7 +17928,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple integer + +tsvectorにある語彙素の数を返します。 length('fat:2,4 cat:3 rat:5A'::tsvector) @@ -13615,8 +17948,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple integer + +tsqueryにある語彙素の数と演算子の数の和を返します。 numnode('(fat & rat) | cat'::tsquery) @@ -13635,10 +17971,15 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +指定されたデフォルト設定にしたがって単語を正規化してテキストをtsqueryに変換します。 +文字列中の句読点はすべて無視されます。(句読点は問い合わせ演算子を決定しません。) +結果の問い合わせはテキスト中の非ストップワードをすべて含む文書にマッチします。 plainto_tsquery('english', 'The Fat Rats') @@ -13657,10 +17998,15 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +指定されたデフォルト設定にしたがって単語を正規化してテキストをtsqueryに変換します。 +文字列中の句読点はすべて無視されます。(句読点は問い合わせ演算子を決定しません。) +結果の問い合わせはテキスト中の非ストップワードをすべて含む句にマッチします。 phraseto_tsquery('english', 'The Fat Rats') @@ -13683,12 +18029,19 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +指定されたデフォルト設定にしたがって単語を正規化してテキストをtsqueryに変換します。 +引用符で囲まれた一連の語は句の検査に変換されます。 +orはOR演算子を生成するものとして扱われ、ダッシュはNOT演算子として扱われます。 +それ以外の句読点は無視されます。 +これにより通常のweb検索ツールに近い振る舞いをします。 websearch_to_tsquery('english', '"fat rat" or cat dog') @@ -13705,9 +18058,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +tsqueryのインデックス付可能な部分の表現を生成します。 +空あるいはTはインデックス付できる部分が無い問い合わせであることを意味します。 querytree('foo & ! bar'::tsquery) @@ -13724,8 +18081,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +vectorの各要素に指定したweightを割り当てます。 setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A') @@ -13743,12 +18103,17 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +vectorの各要素にlexemesで列挙したweightを割り当てます。 +語彙素の文字列は、処理されることなく、そのまま語彙素として扱われます。 +ベクトルのどの語彙素にも一致しない文字列は無視されます。 setweight('fat:2,4 cat:3 rat:5,6B'::tsvector, 'A', '{cat,rat}') @@ -13765,7 +18130,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +位置と重みをtsvectorから削除します。 strip('fat:2,4 cat:3 rat:5A'::tsvector) @@ -13784,9 +18152,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +指定されたデフォルト設定にしたがって単語を正規化してテキストをtsqueryに変換します。 +単語は有効なtsquery演算子と組み合わされていなければなりません。 to_tsquery('english', 'The & Fat & Rats') @@ -13805,9 +18177,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +指定されたデフォルト設定にしたがって単語を正規化してテキストをtsvectorに変換します。 +位置情報が結果に含まれます。 to_tsvector('english', 'The Fat Rats') @@ -13829,6 +18205,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +指定されたデフォルト設定にしたがって正規化してJSON文書中の文字列値をtsvectorに変換します。 +そして結果は文書中の順序にしたがって結合されます。 +位置情報は、あたかも文字列値の各々の対の間にストップワードが存在するかのように生成されます。 +(入力がjsonbの場合、JSONオブジェクトのフィールドのドキュメント順は実装依存であることに注意してください。例中の差異を見てください。) to_tsvector('english', '{"aa": "The Fat Rats", "b": "dog"}'::json) @@ -13870,6 +18252,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +filterによって要求された項目をJSON文書から検索し、指定されたデフォルト設定にしたがって正規化してtsvectorに変換します。 +そして結果は文書中の順序にしたがって結合されます。 +位置情報は、あたかも文字列値の各々の対の間にストップワードが存在するかのように生成されます。 +(入力がjsonbの場合、JSONオブジェクトのフィールドのドキュメント順は実装依存であることに注意してください。例中の差異を見てください。) +filterは0個以上の以下のキーワードを含むjsonbの配列でなければなりません: +"string" (すべての文字列値を含めます)、"numeric" (すべての数値を含めます)、"boolean" (すべての論理値を含めます)、"key" (すべてのキーを含めます)、"all" (すべてを含めます)。 +特別な場合として、filterはこれらのキーワードのどれかである単純なJSON値とすることもできます。 json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]') @@ -13908,10 +18299,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +vectorから与えられたlexemeを削除します。 +lexeme文字列は、それ以上の処理を行わずに、現状のままのlexemeとして扱われます。 ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat') @@ -13925,12 +18320,17 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +vectorからlexemes中のすべての語彙素を削除します。 +lexemes内の文字列は、それ以上の処理を行わずに、そのまま語彙素として扱われます。 +vector内のどの語彙素とも一致しない文字列は無視されます。 ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat']) @@ -13947,8 +18347,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsvector + +vectorからweightsを持つ要素だけを検索します。 ts_filter('fat:2,4 cat:3b,7c rat:5A'::tsvector, '{a,b}') @@ -13969,6 +18372,7 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +document中のqueryにマッチするものを省略形で表示します。 +documenttsvectorではなくて生のテキストでなければなりません。 +問い合わせのマッチ処理を行う前に、指定した、あるいはデフォルトの設定にしたがって単語が正規化されます。 +にこの関数の使い方が記述されています。可能なoptionsについても言及されています。 ts_headline('The fat cat ate the rat.', 'cat') @@ -14002,10 +18411,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text + +JSON document中に出現する文字列値にqueryがマッチしたものを省略形で表示します。 +詳細はを見てください。 ts_headline('{"cat":"raining cats and dogs"}'::jsonb, 'cat') @@ -14026,10 +18439,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple real + +vectorqueryにどれほどマッチするかのスコアを計算します。 +詳細はを見てください。 ts_rank(to_tsvector('raining cats and dogs'), 'cat') @@ -14050,10 +18467,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple real + +被覆密度アルゴリズムを用いてvectorqueryにどれほどマッチするかのスコアを計算します。 +詳細はを見てください。 ts_rank_cd(to_tsvector('raining cats and dogs'), 'cat') @@ -14072,10 +18493,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +query中に出現するtargetsubstituteに置き換えます。 +詳細はを見てください。 ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery) @@ -14090,10 +18515,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +SELECTを実行して取得したターゲットと代替を使用してqueryの一部を置き換えます。 +詳細はを見てください。 SELECT ts_rewrite('a & b'::tsquery, 'SELECT t,s FROM aliases') @@ -14110,10 +18539,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +連続する語彙素でquery1query2のマッチを検索する語句問い合わせを作成します。 +(<->演算子と同じです。) tsquery_phrase(to_tsquery('fat'), to_tsquery('cat')) @@ -14127,10 +18560,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple tsquery + +語彙素が正確にdistanceだけ離れているquery1query2へのマッチを検索する語句問い合わせを作成します。 tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10) @@ -14147,7 +18583,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text[] + +tsvectorを語彙素の配列に変換します。 tsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector) @@ -14168,7 +18607,10 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple weights text ) + +1行につき1語彙素でtsvectorを行の集合に変換します。 select * from unnest('cat:3 fat:2,4 rat:5A'::tsvector) @@ -14188,34 +18630,53 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + +オプションのregconfig引数を受け付ける全てのテキスト検索関数は、その引数が省略された場合で指定された設定を使用します。 + +の関数は、日常のテキスト検索操作では通常使用されないので、別の表にしました。 +これらは主に新しいテキスト検索設定の開発およびデバッグに役立ちます。
+ + テキスト検索デバッグ関数 + +関数 + +説明 + +例 @@ -14238,11 +18699,15 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple lexemestext[] ) + +指定した、あるいはデフォルトの設定にしたがってdocumentから正規化されたトークンを取り出し、各トークンがどのように処理されたかの情報を返します。 +詳細はを見てください。 ts_debug('english', 'The Brightest supernovaes') @@ -14259,10 +18724,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple text[] + +入力トークンが辞書にあれば代替の語彙素の配列、辞書にあるがストップワードである場合には空の配列、未知の単語ならNULLを返します。 +詳細はを見てください。 ts_lexize('english_stem', 'stars') @@ -14282,9 +18751,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple token text ) + +名前で指定したパーサを使ってdocumentからトークンを取り出します。 +詳細はを見てください。 ts_parse('default', 'foo - bar') @@ -14301,9 +18774,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple token text ) + +OIDで指定されたパーサを使ってdocumentからトークンを取り出します。 +詳細はを見てください。 ts_parse(3722, 'foo - bar') @@ -14323,9 +18800,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple description text ) + +名前で指定したパーサが認識できるトークンの型を記述するテーブルを返します。 +詳細はを見てください。 ts_token_type('default') @@ -14342,9 +18823,13 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple description text ) + +OIDで指定したパーサが認識できるトークンの型を記述するテーブルを返します。 +詳細はを見てください。 ts_token_type(3722) @@ -14365,10 +18850,14 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple nentry integer ) + +単一のtsvector列を返さなければならないsqlqueryを実行し、データに含まれる別個の語彙素に関する統計情報を返します。 +詳細はをご覧ください。 ts_stat('SELECT vector FROM apod') @@ -14382,12 +18871,19 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + + UUID関数 UUID generating + + UUID + 生成 + gen_random_uuid @@ -14410,23 +18906,38 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + +は、UUIDの生成に使用できるPostgreSQLの関数を示しています。
+ + <acronym>UUID</acronym>生成関数 + +関数 + +説明 + +例 @@ -14442,7 +18953,11 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple uuid + +《マッチ度[68.571429]》バージョン4(ランダム)のUUIDを生成します。 +《機械翻訳》«Generates a version 4 (random) UUID» gen_random_uuid() @@ -14460,11 +18975,16 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple uuid + +《マッチ度[90.942029]》バージョン7(時間順)のUUIDを生成します。 +タイムスタンプは、ミリ秒精度のUNIXタイムスタンプ+サブミリ秒のタイムスタンプ+ランダム値を使用して計算されます。 +オプションのパラメータshiftは、計算されたタイムスタンプを指定されたintervalだけシフトします。 uuidv7() @@ -14477,29 +18997,47 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + +モジュールは、UUIDを生成するための他の標準アルゴリズムを実装した追加の関数を提供します。 + +は、UUIDから情報を抽出するために使用できるPostgreSQL関数を示しています。
+ + <acronym>UUID</acronym>抽出関数 + +関数 + +説明 + +例 @@ -14512,11 +19050,18 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple timestamp with time zone + +《マッチ度[84.137931]》この関数は、UUIDバージョン1と7からtimestamp with time zoneを抽出します。 +他のバージョンでは、この関数はNULLを返します。 +抽出されたタイムスタンプは必ずしもUUIDが生成された時間と正確に同じではありません。 +これはUUIDを生成した実装に依存します。 +《機械翻訳》«Extracts a timestamp with time zone from a UUID of version 1 or 7. For other versions, this function returns null. Note that the extracted timestamp is not necessarily exactly equal to the time the UUID was generated; this depends on the implementation that generated the UUID.» uuid_extract_timestamp('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) @@ -14530,12 +19075,18 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple smallint + +《マッチ度[82.608696]》この関数は、RFC 9562に記述されている種類のUUIDからバージョンを抽出します。 +他の種類については、この関数はNULLを返します。 +例えば、gen_random_uuidによって生成されたUUIDに対して、この関数は4を返します。 +《機械翻訳》«Extracts the version from a UUID of one of the variants described by RFC 9562. For other variants, this function returns null. For example, for a UUID generated by gen_random_uuid(), this function will return 4.» uuid_extract_version('41db1265-8bc1-4ab3-992f-&zwsp;885799a4af1d'::uuid) @@ -14551,47 +19102,71 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
+ +PostgreSQLで示すUUIDのための通常の比較演算子を提供しています。 + +PostgreSQLUUIDデータ型の詳細はを参照してください。
+ + XML関数 XML Functions + +この節で説明される関数および擬似関数式は、xml型の値に対して機能します。 +xml型についての情報はを参照してください。 +xml型のやりとりを変換するxmlparseおよびxmlserialize擬似関数式はこの節ではなく、そこに記載されています。 + +これらの関数の大半はPostgreSQLconfigure --with-libxmlでビルドされていることを必要としています。 + + XML内容の生成 + +SQLデータからXML内容を生成するために関数と擬似関数式の一式が提供されています。 +そのようなものとして、クライアントアプリケーションが問い合わせ結果を処理のためXML文書に書式化するのにこれらは特に適しています。 @@ -14606,15 +19181,22 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple + +関数xmltextは、入力引数を内容とする単一のテキストノードを持つXML値を返します。 +アンパサンド()、左右の山カッコ(]]>)、引用符()などの定義済みのエンティティはエスケープされます。 + +例: '); xmltext @@ -14636,16 +19218,24 @@ SELECT xmltext('< foo & bar >'); + +関数xmlcommentは指定のテキストを内容とするXMLコメントを含んだXML値を作成します。 +テキストは--を含むこと、または-で終結することはできません。さもないと結果として構築されるXMLコメントは有効になりません。 +引数がNULLならば結果もNULLになります。 + +例: + +関数xmlconcatは、個々のXML値のリストを結合し、XMLの内容断片を含む単一の値を作成します。 +NULL値は削除され、NULL以外の引数が存在しないときのみ結果はNULLになります。 + +例: ', 'foo'); @@ -14686,6 +19283,7 @@ SELECT xmlconcat('', 'foo'); + +XML宣言が提示されている場合は次のように組み合わされます。 +全ての引数の値が同一のXML version宣言を持っていれば、そのversionが結果に使用されます。さもなければversionは使用されません。 +全ての引数の値でstandaloneの宣言値がyesであれば、その値が結果に使用されます。 +全ての引数の値にstandalone宣言値があり、その中で1つでもnoがある場合、それが結果に使用されます。 +それ以外の場合は、結果はstandalone宣言を持ちません。 +standalone宣言を必要とするが、standalone宣言がないという結果になった場合には、version 1.0のversion宣言が使用されます。 +これはXMLがXML宣言においてversion宣言を含むことを要求するためです。 +encoding宣言は無視され、全ての場合で削除されます。 + +例: ', ''); @@ -14725,6 +19335,7 @@ SELECT xmlconcat('', ' + +xmlelement式は与えられた名前、属性、および内容を持つXML要素を生成します。 +構文中に示すnameattname項目は単純な識別子で値ではありません。 +attvaluecontent項目は式で、PostgreSQLの任意のデータ型を出力できます。 +XMLATTRIBUTES中の引数はXML要素の属性を生成します。content値は結合して内容を構成します。 + +例: + +有効なXML名ではない要素名と属性名は、シーケンス_xHHHH_により障害となる文字を置換することでエスケープされます。ここで、HHHHは16進数によるその文字のUnicode文字コード番号です。 +例をあげます。 + +属性値が列参照の場合、明示的な属性名を指定する必要はありません。この場合、デフォルトで列名が属性名として使用されます。 +その他の場合には、属性は明示的な名前で与えられなければなりません。 +従って、以下の例は有効です。 CREATE TABLE test (a xml, b xml); SELECT xmlelement(name test, xmlattributes(a, b)) FROM test; + +しかし、以下の例は有効ではありません。 SELECT xmlelement(name test, xmlattributes('constant'), a, b) FROM test; SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test; @@ -14793,9 +19424,14 @@ SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test; + +もし要素内容が指定されればそのデータ型に従って書式化されます。 +もし内容そのものがxml型であれば、複合XML文書が構築されます。 +例をあげます。 ]]> + +そのほかの型の内容は有効なXML文字データにフォーマットされます。 +これは特に文字<、>、および&がエンティティに変換されることを意味します。 +バイナリデータ(データ型はbytea)は、設定パラメータの設定にしたがって、base64もしくは16進符号化方式で表現されます。 +個々のデータ型に対する特定の動作は、で説明されているように、SQL:2006以降で指定された型をPostgreSQLデータ型に調整するため発展すると期待されます。 @@ -14831,16 +19473,23 @@ SELECT xmlelement(name foo, xmlattributes('xyz' as bar), + +xmlforest式は与えられた名前と内容を使用し、要素のXMLフォレスト(シーケンス)を生成します。 +xmlelementでは、各nameは単純な識別子でなければなりませんが、content式はどんな型のデータも持つことができます。 + +例: SELECT xmlforest('abc' AS foo, 123 AS bar); @@ -14860,23 +19509,35 @@ WHERE table_schema = 'pg_catalog'; ... + +第2の例に見られるように、内容の値が列参照の場合、要素名は省略可能です。この時は、列名がデフォルトで使用されます。 +そうでない時は、名前が指定されなければなりません。 + +有効なXML名ではない要素名は上のxmlelementで説明した通りエスケープされます。 +同様にして、既にxml型であるものを除き、内容データは有効なXML内容になるようにエスケープされます。 + +XMLフォレストは2つ以上の要素からなる場合、有効なXML文書ではないことに注意してください。 +したがって、xmlelement内にxmlforest式をラップすることが有用なことがあります。 @@ -14892,6 +19553,7 @@ WHERE table_schema = 'pg_catalog'; + +xmlpi式はXML処理命令を作成します。 +xmlelementでは、各nameは単純な識別子でなければなりませんが、content式はどんな型のデータも持つことができます。 +contentが存在するときは、それは?>という文字シーケンスを含んではいけません。 + +例: + +xmlroot式はXML値のルートノードの属性を変更します。 +versionが指定されていると、ルートノードのversion宣言での値を変更し、standalone設定が指定されていると、ルートノードのstandalone宣言での値を変更します。 @@ -14957,6 +19630,7 @@ SELECT xmlroot(xmlparse(document 'abc'), + +ここで説明している他の関数とは異なり、xmlagg関数は集約関数です。 +これはxmlconcatが行うように、入力値を連結する集約関数ですが、単一行内の複数の式にまたがった連結ではなく、複数行にまたがった連結を行います。 +集約関数についての追加情報はを参照してください。 + +例: abc'); @@ -14980,9 +19661,13 @@ SELECT xmlagg(x) FROM test; + +連結の順序を決定するため、に記述されているようにORDER BY句を集計呼び出しに追加することができます。 +以下は例です。 + +下記は以前のバージョンで推奨されていた、非標準的な方法例です。特定のケースでは依然として有用かもしれません。 + + XML述語 + +この節で記述されている式は、xml値の属性をチェックします。 @@ -15027,11 +19721,15 @@ SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab; + +式IS DOCUMENTは引数XML値が適切なXML文書であれば真を返し、そうでなければ(つまり、内容の断片)偽を返すか、もしくは引数がNULLであればNULLを返します。 +文書と内容の断片の差異についてはを参照してください。 @@ -15047,9 +19745,12 @@ SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab; + +式IS NOT DOCUMENTは引数XML値が適切なXML文書であれば偽を返し、そうでなければ(つまり、内容の断片)真を返すか、もしくは引数がNULLであればNULLを返します。 @@ -15065,6 +19766,7 @@ SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab; + +関数xmlexistsは渡されたXML値をコンテキスト項目としてXPath 1.0式(第一引数)を評価します。 +この関数は評価が空のノード集合を生成する場合には偽を返し、それ以外の値を返すならば真を返します。 +もしどれかの引数がNULLであった場合はNULLを返します。 +コンテキスト項目として渡される非NULLの値は、内容の断片や非XML値ではなく、XML文書でなければなりません。 + +例: TorontoOttawa'); @@ -15087,17 +19797,23 @@ SELECT xmlexists('//town[text() = ''Toronto'']' PASSING BY VALUE 'T + +PostgreSQLBY REF句とBY VALUE句を受け付けますが、で説明されているように無視します。 + +標準SQLではxmlexists関数はXML問い合わせ言語における式を評価しますが、で説明されているように、PostgreSQLはXPath 1.0の式だけを受け付けます。 @@ -15123,6 +19839,7 @@ SELECT xmlexists('//town[text() = ''Toronto'']' PASSING BY VALUE 'T + +これらの関数はtext文字列が整形式かどうかをチェックし、論理値で結果を返します。 +xml_is_well_formed_documentは文書が整形式かをチェックし、一方xml_is_well_formed_contentは内容が整形式かをチェックします。 +xml_is_well_formedは、パラメータ値がDOCUMENTに設定されていれば前者を、CONTENTが設定されていれば後者のチェックを実施します。 +これは、xml_is_well_formedは単純なxml型へのキャストが成功するかの判断に有用であり、その他の2つの関数はXMLPARSEの対応による変換が成功するかの判断に有用であることを意味します。 + +例: + +最後の例は、名前空間が正しく一致しているかのチェックも含むことを示しています。 + + XMLの処理 + +データ型xmlの値を処理するため、PostgreSQLはXPath 1.0式を評価する関数xpathおよびxpath_existsと、テーブル関数XMLTABLEを提供しています。 @@ -15203,6 +19937,7 @@ SELECT xml_is_well_formed_document(' +関数xpathは、XML値xmlに対し、XPath 1.0式xpath(テキストとして指定)を評価します。 +そして、XPath式で作成されたノード集合に対応するXML値の配列を返します。 +もし、XPath式がノード集合ではなくスカラ値を返す場合、単一要素の配列が返されます。 + +2番目の引数は整形済XML文書でなければなりません。特に、単一のルートノード要素を持たなければなりません。 + +オプショナルな関数の3番目の引数は名前空間マッピング配列です。 +この配列は、第2軸が2に等しい長さをもつ2次元text配列です(つまり、それは配列の配列で、それぞれは正確に2つの要素からなります)。 +それぞれの配列のエントリの最初の要素は名前空間の名前(別名)で、2番目は名前空間のURIです。 +この配列内で提供される別名がXML文書自身で使用されるものと同じであることは必要ではありません(言い換えると、XML文書内およびxpath関数の両方の文脈の中で、別名はローカルです)。 + +例: test', ARRAY[ARRAY['my', 'http://example.com']]); @@ -15243,7 +19994,10 @@ SELECT xpath('/my:a/text()', 'test', + +デフォルト(匿名)名前空間を取り扱うためには、以下のようなことを実施してください。 test', ARRAY[ARRAY['mydefns', 'http://example.com']]); @@ -15268,6 +20022,7 @@ SELECT xpath('//mydefns:b/text()', 'test + +関数xpath_existsは、xpath関数の特別な形式です。 +この関数は、XPath 1.0を満足する個別のXML値を返す代わりに、問い合わせがそれを満足するかどうか(具体的には空のノード集合以外の値を返すかどうか)を論理値で返します。 +この関数は、名前空間にマッピングされた引数をもサポートする点を除き、標準のXMLEXISTS述語と同じです。 + +例: test', ARRAY[ARRAY['my', 'http://example.com']]); @@ -15302,6 +20064,10 @@ SELECT xpath_exists('/my:a/text()', 'testtable function XMLTABLE + + テーブル関数 + XMLTABLE + XMLTABLE ( @@ -15314,14 +20080,19 @@ SELECT xpath_exists('/my:a/text()', 'test + +xmltable式は、与えられたXML値、行を抽出するXPathフィルタ、オプションの列定義の集合に基づいてテーブルを生成します。 +関数と構文的に似ていますが、これは問い合わせ中のFROM句におけるテーブルとしてのみ使用できます。 + +オプションのXMLNAMESPACES句はカンマで区切られた名前空間のリストを与えます。 +各々のnamespace_uritext式で、namespace_nameは単純な識別子です。 +これは文書とその別名で使用されるXML名前空間を指定します。 +デフォルトの名前空間指定は現在のところサポートされていません。 + +必須のrow_expression引数は評価されるXPath 1.0式(textで与えます)で、XMLノード集合を得るためにdocument_expressionをそのコンテキスト項目として渡します。 +このノードはxmltableが出力行に変換します。 +document_expressionがNULLであるか、row_expressionが空のノード集合あるいはノード集合以外の値を生成するなら行は出力されません。 + +document_expressionrow_expressionのためのコンテキスト項目を提供します。 +それは整形式XMLの文書でなければならず、フラグメントやフォレストは受け付けられません。 +で説明されているように、BY REF句とBY VALUE句は受け付けられますが、無視されます。 + +標準SQLではxmltable関数はXML問い合わせ言語の式を評価しますが、で説明されているようにPostgreSQLではXPath 1.0式だけを受け付けます。 + +必須のCOLUMNS句は、出力テーブルに現れる列を指定します。 +形式については上記の構文サマリを参照してください。 +各列には名前が必須で、データ型についても同様です。(FOR ORDINALITYが指定された場合を除きます。その場合は暗黙的にintegerが想定されます。) +パス、デフォルト値、NULLを許すかどうかの句は省略できます。 + +FOR ORDINALITYと印がつけられた列には、row_expressionの結果ノード集合から取得されたノードの順序に対応する1から始まる行番号が入ります。 +FOR ORDINALITYの印が付けられるのは最大でも1列です。 + +XPath 1.0はノード集合内のノードの順序を指定しません。ですから、結果が特定の順序になっていることに依存するコードは実装依存となります。 +詳細はをご覧ください。 + +列のcolumn_expressionはXPath 1.0式で、row_expressionの結果における現在のノードをそのコンテキスト項目としてrow_expressionの結果に対応する各行について評価されて、列の値を得ます。 +column_expression が与えられなかった場合は、暗黙的なパスとして列名が使用されます。 + +列のXPath式が非XML値(XPath 1.0における文字列、論理値、倍精度浮動小数点数に限られます)を返し、その列がxml以外のPostgreSQL型なら、あたかも値の文字列表現をPostgreSQL型にアサインしたように列に値がセットされます。 +(値が論理値の場合、出力列型が数値カテゴリに属するならその文字列表現は1または0になり、それ外ならtrueまたはfalseになります。) + +列のXPath表現が空ではないXMLノードの集合を返し、列のPostgreSQL型がxmlである場合には、式が文書あるいはフォームの内容なら、列には正確に式の結果がアサインされます。 + +トップレベルにおいて複数の要素ノードを含むか、あるいは要素の外側の非空白テキストであるような結果は、コンテントフォームの例です。 +XPathの結果はそのどちらでもないフォームであることがあり得ます。 +たとえば、それを含む要素から選択された属性ノードを返す場合です。 +XPath 1.0のstring関数で定義されているように、そうした結果は、許可されないノードを文字列値で置き換えたコンテントフォームに設定されます。 + +xml出力列にアサインされた非XMLの結果は、結果の値が文字列値となる単一のテキストノードであるコンテントを生成します。 +それ以外の型の列にアサインされたXMLの結果は複数のノードを持たないかも知れませんし、エラーを生じするかも知れません。 +正確に一つのノードだけが存在するなら、列にはあたかもノードの文字列値(XPath 1.0 string関数の定義されているように) がPostgreSQL型にアサインされたように設定されます。 + +ある要素と、その子孫に含まれるすべてのテキストノードをドキュメントの順に結合したものがXML要素の文字列値です。 +テキストノードの子孫を持たない要素の文字列値は空文字列です。( NULLではありません。) +すべてのxsi:nil属性は無視されます。 +非テキスト要素の間にある空白のみからなるtext()2つのノードは保存され、text()の先頭の空白は平坦化されないことに注意してください。 +XPath 1.0 string関数が、他のXMLノード型と非XML値の文字列値を定義するルールのために参照されるかも知れません。 + +ここで示した変換ルールは、で説明されているように、正確に標準SQLに従っているわけではありません。 + +パス式がある行に対して空のノード集合(典型的にはマッチしなかった場合)を返した時は、default_expressionが指定されている場合を除き、列にはNULLが設定されます。 +そしてその式を評価した結果から生じる値が使用されます。 + +xmltableが呼び出されて直ちに評価されるのと異なり、default_expressionはその列に対してデフォルトが必要になるたびに評価されます。 +式が安定(stable)または不変(immutable)とみなされる場合、評価は繰り返し行われないかもしれません。 +これはdefault_expressionの中でnextvalのような揮発性関数を使用できることを意味します。 + +列にはNOT NULLの印をつけることができます。 +NOT NULLの列のcolumn_expressionが何にもマッチせず、DEFAULTがない、あるいはdefault_expressionの評価結果もNULLになるという場合はエラーが報告されます。 + +例: + +以下の例では、複数のtext()ノードの結合、列名のXPathフィルタとしての使用、空白文字、XMLコメント、処理命令の取扱いを示します。 + +以下の例では、XMLNAMESPACES句を使ってXMLドキュメントやXPath式で使われる追加の名前空間のリストを指定する方法を示します。 + + XMLにテーブルをマップ XML export + +以下の関数はリレーショナルテーブルの内容をXML値にマップします。 +これらはXMLエクスポート機能と考えることができます。 table_to_xml ( table regclass, nulls boolean, tableforest boolean, targetns text ) xml @@ -15596,6 +20460,7 @@ SELECT xmltable.* + +table_to_xmlは、パラメータtableとして渡された名前付きのテーブルの内容をマップします。 +regclass型はオプションのスキーマ修飾と二重引用符を含む、通常の表記法を使用しテーブルを特定する文字列を受け付けます。(詳細はを参照してください。) +query_to_xmlは、パラメータqueryとしてテキストが渡された問い合わせを実行し、結果セットをマップします。 +cursor_to_xmlは、パラメータcursorで指定されたカーソルから提示された行数を取得します。 +それぞれの関数により結果値がメモリに構築されるため、この異形は巨大なテーブルをマップする必要がある場合推奨されます。 + +tableforestが偽であれば、結果のXML文書は以下のようになります。 @@ -15629,8 +20503,11 @@ SELECT xmltable.* ]]> + +tableforestが真であれば、結果は以下のようなXML文書の断片です。 data @@ -15644,12 +20521,16 @@ SELECT xmltable.* ... ]]> + +テーブル名が利用できないとき、つまり、問い合わせ、またはカーソルをマップする時は、最初の書式では文字列tableが使用され、2番目の書式ではrowが使用されます。 + +これらどの書式を選択するのかはユーザ次第です。 +最初の書式は適切なXML文書で、多くのアプリケーションにおいて重要です。 +第2の書式は、後に結果値が1つの文書に再び組み立てられる場合、cursor_to_xml関数内でより有用になる傾向があります。 +上記で説明したXML内容を作成する関数、特にxmlelementは結果を好みにかえるために使用することができます。 + +データの値は上記関数xmlelementで説明したのと同じ方法でマップされます。 + +パラメータnullsは出力にNULL値が含まれる必要があるかを決定します。 +もし真であれば列内のNULL値は以下のように表現されます。 ]]> + +ここでxsiはXMLスキーマインスタンスに対するXML名前空間接頭辞です。 +適切な名前空間宣言が結果値に追加されます。 +もし偽の場合、NULL値を含む列は単に出力から削除されます。 + +パラメータtargetnsは結果の希望するXML名前空間を指定します。 +特定の名前空間が必要なければ、空文字列を渡す必要があります。 + +以下の関数は、対応する上記関数により行われたマッピングを記述するXMLスキーマ文書を返します。 table_to_xmlschema ( table regclass, nulls boolean, tableforest boolean, targetns text ) xml @@ -15695,15 +20600,22 @@ SELECT xmltable.* cursor_to_xmlschema ( cursor refcursor, nulls boolean, tableforest boolean, targetns text ) xml + +一致するXMLデータマッピングとXMLスキーマ文書を取得するため、同じパラメータが渡されることが不可欠です。 + +以下の関数は、XMLデータマッピングとそれに対応するXMLスキーマがお互いにリンクされた、1つの文書(またはフォレスト)を作成します。 +これらは自己完結した、自己記述的な結果を希望する場合に便利です。 table_to_xml_and_xmlschema ( table regclass, nulls boolean, tableforest boolean, targetns text ) xml @@ -15713,9 +20625,12 @@ SELECT xmltable.* + +さらに、以下の関数がスキーマ全体、または現在のデータベース全体の類似マッピングを作成するため利用できます。 schema_to_xml ( schema name, nulls boolean, tableforest boolean, targetns text ) xml @@ -15732,20 +20647,31 @@ SELECT xmltable.* tableforest boolean, targetns text ) xml + +これらの関数は現在のユーザが読めないテーブルは無視します。 +加えてデータベース中全体に渡る関数は現在のユーザがUSAGE(検索)権限を持たないスキーマを無視します。 + +これらはメモリ内に作成される必要がある、多くのデータを生成する潜在的可能性があることに注意してください。 +巨大なスキーマ、またはデータベースの内容マッピングを要求する際は、その代わりにテーブルを別々にマップすること、さらにはカーソル経由とすることさえ、検討することは無駄ではありません。 + +スキーマ内容マッピングの結果は以下のようになります。 @@ -15758,12 +20684,18 @@ table2-mapping ]]> + +ここで、テーブルマッピング書式は上で説明したとおりtableforestパラメータに依存します。 + +データベース内容マッピング書式は以下のようになります。 @@ -15780,10 +20712,14 @@ table2-mapping ]]> + +ここで、スキーママッピングは上記のとおりです。 + +これらの関数で作成された出力を使用する1つの例として、は、テーブルデータの表形式への翻訳を含むtable_to_xml_and_xmlschemaからHTML文書への出力の変換をおこなうXSLTスタイルシートを示します。 +同じようにして、これらの関数の結果は他のXML基準書式に変換されます。 + + SQL/XML出力をHTMLに変換するXSLTスタイルシート + + + + JSON関数と演算子 JSON functions and operators + + JSON + 関数と演算子 + SQL/JSON functions and expressions + + SQL/JSON + 関数と式 + + +この節では次のことを説明します。 + +JSONデータを処理、生成する関数と演算子 + +SQL/JSONパス言語 + +SQL/JSON問い合わせ関数 + +SQL環境内のJSONデータ型にネイティブサポートを提供するために、PostgreSQLSQL/JSONデータモデルを実装しています。 +このモデルは、一連の項目で構成されます。 +各項目は、SQLスカラ値、追加のSQL/JSON NULL値、およびJSON配列とオブジェクトを使用する複合データ構造を保持できます。 +モデルは、JSON規格RFC 7159で暗黙的に指定されているデータモデルを形式化したものです。 + +SQL/JSONでは、トランザクションをサポートをしながら、通常のSQLデータと一緒にJSONデータをハンドルすることができます。以下のものが含まれます: + +JSONデータをデータベースにアップロードし、それを文字またはバイナリ文字列として通常のSQL列に保存します。 + +リレーショナルデータからJSONオブジェクトと配列を生成します。 + +SQL/JSON問い合わせ関数およびSQL/JSONパス言語式を使用してJSONデータを照会します。 + +SQL/JSON標準を更に学ぶためには、をご覧ください。 +PostgreSQLでサポートされているJSON型の詳細に関しては、をご覧ください。 + + JSONデータの処理と生成 + +にJSONデータ型(を参照)で使用可能な演算子を示します。 +加えてで示す通常の比較演算子がjsonbで利用できますが、jsonでは利用できません。 +比較演算子はで概要が示されているように示すBツリー操作用の順序付け規則にしたがいます。 +レコードの値をJSONに集約するjson_agg集約関数、値の対をJSONオブジェクトに集約するjson_object_agg集約関数、およびそれらのjsonb版のjsonb_aggjsonb_object_aggについてはも参照して下さい。 + + <type>json</type>と<type>jsonb</type>演算子 + +演算子 + +説明 + +例 @@ -15970,9 +20980,13 @@ table2-mapping jsonb + +JSON配列のn番目の要素を取り出します。 +(配列要素はゼロから始まりますが、負の整数は最後から数えられます。) '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json -> 2 @@ -15994,7 +21008,10 @@ table2-mapping jsonb + +与えられたキーでJSONオブジェクトフィールドを取り出します。 '{"a": {"b":"foo"}}'::json -> 'a' @@ -16012,8 +21029,11 @@ table2-mapping text + +JSON配列のn番目の要素をtextとして取り出します。 '[1,2,3]'::json ->> 2 @@ -16031,7 +21051,10 @@ table2-mapping text + +与えられたキーでJSONオブジェクトフィールドをtextとして取り出します。 '{"a":1,"b":2}'::json ->> 'b' @@ -16049,8 +21072,11 @@ table2-mapping jsonb + +指定したパスにおけるJSONの副オブジェクトを取り出します。パス要素はフィールドキーあるいは配列のインデックスでも構いません。 '{"a": {"b": ["foo","bar"]}}'::json #> '{a,b,1}' @@ -16068,7 +21094,10 @@ table2-mapping text + +指定したパスにおけるJSONの副オブジェクトをtextとして取り出します。 '{"a": {"b": ["foo","bar"]}}'::json #>> '{a,b,1}' @@ -16081,33 +21110,53 @@ table2-mapping + +JSON入力が要求と一致する正しい構造をしていなければ、フィールド/要素/パス抽出演算子は失敗するのではなくNULLを返します。例えばそのような要素が存在しない場合です。 + +ほかにjsonbだけで利用可能な演算子もいくつか存在します。 +それらをに示します。 +には、インデックス付されたjsonbデータを効率的に検索するためにこれらの演算子をどのように利用できるかについて書いてあります。
+ + 追加<type>jsonb</type>演算子 + +演算子 + +説明 + +例 @@ -16119,8 +21168,12 @@ table2-mapping boolean + +最初のJSON値は二番目を含んでいるか? +(包含の詳細はを参照してください。) '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb @@ -16134,7 +21187,10 @@ table2-mapping boolean + +最初のJSON値は二番目に含まれているか? '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb @@ -16148,8 +21204,11 @@ table2-mapping boolean + +そのテキスト文字列はトップレベルのキーあるいは配列要素としてJSON値中に存在しているか? '{"a":1, "b":2}'::jsonb ? 'b' @@ -16167,8 +21226,11 @@ table2-mapping boolean + +テキスト配列中のどれかの文字列がトップレベルのキーあるいは配列要素として存在しているか? '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'd'] @@ -16182,8 +21244,11 @@ table2-mapping boolean + +テキスト配列のすべての文字列がトップレベルのキーあるいは配列要素として存在しているか? '["a", "b", "c"]'::jsonb ?& array['a', 'b'] @@ -16197,6 +21262,7 @@ table2-mapping jsonb + +2つのjsonb値を結合します。 +2つの配列を結合するとそれらのキーの和を持つ配列を生成します。 +キーが重複している場合は2番目のオブジェクトの値が使用されます。 +それ以外の場合には非配列入力を単一の要素を持つ配列に変換し、次に2つの配列として取り扱います。 +再帰操作は行いません。トップレベルの配列あるいはオブジェクト構造だけがマージされます。 '["a", "b"]'::jsonb || '["a", "d"]'::jsonb @@ -16224,8 +21296,11 @@ table2-mapping [{"a": "b"}, 42] + +一つの要素を持つとして配列を他の配列に追加するには、例のように配列の追加のレイヤ中に含めてください。 '[1, 2]'::jsonb || jsonb_build_array('[3, 4]'::jsonb) @@ -16239,8 +21314,11 @@ table2-mapping jsonb + +キー(及びその値)をJSONオブジェクトから削除します。あるいはマッチする文字列値をJSON配列から削除します。 '{"a": "b", "c": "d"}'::jsonb - 'a' @@ -16258,7 +21336,10 @@ table2-mapping jsonb + +左のオペランドからマッチするすべてのキーあるいは配列要素を削除します。 '{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[] @@ -16272,9 +21353,13 @@ table2-mapping jsonb + +指定したインデックス(負の整数は最後から数えます)の配列要素を削除します。 +JSON値が配列でなければエラーが生じます。 '["a", "b"]'::jsonb - 1 @@ -16288,8 +21373,11 @@ table2-mapping jsonb + +指定パスのフィールドあるいは配列要素を削除します。パス要素はフィールドキーあるいは配列インデックスが指定できます。 '["a", {"b":1}]'::jsonb #- '{1,b}' @@ -16303,10 +21391,13 @@ table2-mapping boolean + +JSONパスは指定されたJSON値に対して何らかの項目を返すか?(これは標準SQLのJSONパス式でのみ有用であり、述語チェック式では有効ではありません。述語チェック式は常に値を返すからです。) '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] ? (@ > 2)' @@ -16320,6 +21411,7 @@ table2-mapping boolean + +指定されたJSON値に対するJSONパス述語チェックの結果を返します(これは、標準SQLのJSONパス式ではなく、述部チェック式でのみ有用です。パス結果が単一のブール値でない場合はNULLを返すためです)。 '{"a":[1,2,3,4,5]}'::jsonb @@ '$.a[*] > 2' @@ -16339,39 +21433,65 @@ table2-mapping + +jsonpath演算子の@?および@@演算子は以下のエラーを抑止します。 +オブジェクトフィールドあるいは配列要素の欠如、期待しないJSON要素型、日付時刻及び数値エラー。 +以下に示すjsonpath関連の関数もこれらのエラーを抑止するようにすることもできます。 +この振る舞いは、異なる構造のJSON文書集合を検索する際に役に立つかも知れません。 + +に、json値およびjsonb値を作成するために利用可能な関数を示します。 + +このテーブルの一部の関数は、返されるデータ型を指定するRETURNING句を持っています。 +これはjsonjsonbbytea、文字列型(textcharvarchar)、あるいはjsonからその型へのキャストがある型のいずれかでなければなりません。 +デフォルトではjson型が返されます。
+ + JSON作成関数 + +関数 + +説明 + +例 @@ -16393,22 +21513,34 @@ table2-mapping jsonb + +SQL値をjsonあるいはjsonbに変換します。 +配列と複合型は再帰的に配列とオブジェクトに変換されます。(多次元配列はJSONにおける配列の配列になります。) +それ以外は、そのSQLデータ型からjsonにキャストがあれば、キャスト関数が変換のために用いられます。 + +たとえば拡張にはhstoreからjsonへのキャストがあり、JSON生成関数で変換されたhstore値は、原始的な文字列値としてではなく、JSONオブジェクトとして表示されます。 + +そうでなければスカラJSON値が生成されます。 +数値、論理値、NULL以外のスカラには、有効なJSON文字列値にするための必要なエスケープ処理が施されたテキスト表現が使われます。 to_json('Fred said "Hi."'::text) @@ -16429,10 +21561,14 @@ table2-mapping json + +SQL配列をJSON配列に変換します。 +追加の論理引数が真であるときに改行がトップレベルの配列要素の間に加えられる以外は、その振る舞いはto_jsonと同じです。 array_to_json('{{1,5},{99,100}}'::int[]) @@ -16447,6 +21583,9 @@ table2-mapping in multiple lines, but that's surprisingly hard to do in a way that matches in HTML and PDF output. Other standard SQL/JSON functions have the same problem. +これは出力中で辛うじて読めるものであることに注意してください。まるで中括弧と大括弧の混ぜ合わせのように見えます。 +複数行に分割したほうが良いのかも知れませんが、HTMLやPDF出力でそれを行うのは驚くほど難しいのです。 +他の標準SQL/JSON関数も同じ問題を抱えています。 --> json_array @@ -16461,6 +21600,7 @@ table2-mapping RETURNING data_type FORMAT JSON ENCODING UTF8 ) + +JSON配列を、一連のvalue_expression引数、またはquery_expressionの結果のいずれかから構成します。 +query_expressionは、単一の列を返すSELECT問い合わせである必要があります。 +ABSENT ON NULLが指定されている場合、NULL値は無視されます。 +query_expressionが使用されている場合、常にそうなります。 json_array(1,true,json '{"a":null}') @@ -16488,10 +21633,14 @@ table2-mapping json + +SQL複合値をJSONオブジェクトに変換します。 +追加の論理引数が真であるときに改行がトップレベルの配列要素の間に加えられる以外は、その振る舞いはto_jsonと同じです。 row_to_json(row(1,'foo')) @@ -16515,9 +21664,13 @@ table2-mapping jsonb + +異なる型から構成される可能性のあるJSON配列をvariadic引数リストから作成します。 +各々の引数はto_jsonあるいはto_jsonbに従って変換されます。 json_build_array(1, 2, 'foo', 4, 5) @@ -16541,10 +21694,16 @@ table2-mapping jsonb + +variadic引数リストからJSONオブジェクトを作成します。 +慣例により引数リストは代替キーと値が交互に並んだものです。 +キー引数はテキストに強制的に変換されます。 +値引数はto_jsonあるいはto_jsonbに従って変換されます。 json_build_object('foo', 1, 2, row(3,'bar')) @@ -16563,6 +21722,7 @@ table2-mapping RETURNING data_type FORMAT JSON ENCODING UTF8 ) + +指定されたすべてのキー/値ペアのJSONオブジェクトを構築します。 +キー/値ペアが指定されていない場合は、空のオブジェクトを構築します。 +key_expressionは、textタイプに変換されるJSONキーを定義するスカラ式です。 +NULLにすることも、JSONタイプにキャストを持つタイプに属することもできません。 +WITH UNIQUE KEYSが指定されている場合は、重複key_expressionがあってはなりません。 +ABSENT ON NULLが指定されている場合、NULLと評価されるvalue_expressionは出力から除外されます。 +NULL ON NULLが指定されているか、その句が省略されている場合、キーはNULLの値で含まれます。 json_object('code' VALUE 'P123', 'title': 'Jaws') @@ -16600,12 +21768,17 @@ table2-mapping jsonb + +テキスト配列からJSONオブジェクトを作成します。 +配列は、偶数個の要素からなる1次元(キー/値の対が交互に並んでいるものと扱われます)あるいは内側の配列が2つの要素を持つ2次元(2つの要素がキー/値のペアとして扱われます)のいずれかでなければなりません。 +すべての値はJSON文字列に変換されます。 json_object('{a, 1, b, "def", c, 3.5}') @@ -16626,9 +21799,13 @@ table2-mapping jsonb + +この形のjson_objectは2つの別々の配列からキーと値の対を取ります。 +他の点ではすべて、引数1つの形と同じです。 json_object('{a,b}', '{1,2}') @@ -16646,6 +21823,7 @@ table2-mapping json + +指定されたtextまたはbytea文字列(UTF8エンコーディング)をJSON値に変換します。 +expressionがNULLの場合、SQLのNULL値が返されます。 +WITH UNIQUEが指定された場合、expressionは重複するオブジェクトキーを含んではなりません。 json('{"a":123, "b":[true,"foo"], "a":"bar"}') @@ -16667,11 +21849,17 @@ table2-mapping json_scalar ( expression ) + +指定されたSQLスカラ値をJSONスカラ値に変換します。 +入力がNULLの場合、SQLのNULLが返されます。 +入力が数値またはブール値の場合、対応するJSONの数値またはブール値が返されます。 +それ以外の場合は、JSONの文字列が返されます。 json_scalar(123.45) @@ -16690,12 +21878,18 @@ table2-mapping RETURNING data_type FORMAT JSON ENCODING UTF8 ) + +SQL/JSON式を文字列またはバイナリ文字列に変換します。 +expressionは、任意のJSON型、任意の文字列型、またはUTF8エンコーディングのbyteaです。 +RETURNINGで使用される戻り型は、任意の文字列型またはbyteaです。 +デフォルトはtextです。 json_serialize('{ "a" : 1 } ' RETURNING bytea) @@ -16707,23 +21901,38 @@ table2-mapping
+ +には、JSONをテストするためのSQL/JSON機能の詳細が記載されています。 + + SQL/JSONテスト用関数 + +関数の呼び出し形式 + +説明 + +例 @@ -16736,6 +21945,7 @@ table2-mapping { WITH | WITHOUT } UNIQUE KEYS + +この述語は、expressionが指定された型のJSONとして解析できるかどうかをテストします。 +SCALARARRAY、またはOBJECTが指定されている場合、テストはJSONがその特定の型のものであるかどうかを示します。 +WITH UNIQUE KEYSが指定されている場合、expressionのオブジェクトもテストされ、重複キーがあるかどうかが確認されます。 @@ -16787,23 +22001,38 @@ array w/o UK? | t
+ +jsonjsonb値を処理するのに使える関数を示します。 + + JSON処理関数 + +関数 + +説明 + +例 @@ -16825,7 +22054,10 @@ array w/o UK? | t setof jsonb + +トップレベルのJSON配列をJSON値の集合に展開します。 select * from json_array_elements('[1,true, [2,false]]') @@ -16856,7 +22088,10 @@ array w/o UK? | t setof text + +トップレベルのJSON配列をtext値の集合に展開します。 select * from json_array_elements_text('["foo", "bar"]') @@ -16886,7 +22121,10 @@ array w/o UK? | t integer + +トップレベルのJSON配列の要素数を返します。 json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]') @@ -16918,7 +22156,10 @@ array w/o UK? | t value jsonb ) + +トップレベルのJSONオブジェクトをキー/値のペアの集合に展開します。 select * from json_each('{"a":"foo", "b":"bar"}') @@ -16952,9 +22193,13 @@ array w/o UK? | t value text ) + +トップレベルのJSONオブジェクトをキー/値のペアの集合に展開します。 +戻り値のvaluetext型です。 select * from json_each_text('{"a":"foo", "b":"bar"}') @@ -16984,10 +22229,14 @@ array w/o UK? | t jsonb + +指定したパスにおけるJSONの副オブジェクトを取り出します。 +(これは#>演算子と機能的に同じですが、パスをvariadicリストで書き出す方がより便利な場合があります。) json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}', 'f4', 'f6') @@ -17011,9 +22260,13 @@ array w/o UK? | t text + +指定したパスにおけるJSONの副オブジェクトをtextとして取り出します。 +(これは機能的には#>>演算子と同じです。) json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}', 'f4', 'f6') @@ -17037,7 +22290,10 @@ array w/o UK? | t setof text + +トップレベルのJSONオブジェクト中のキーの集合を返します。 select * from json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') @@ -17067,6 +22323,7 @@ array w/o UK? | t anyelement + +トップレベルのJSONオブジェクトをbase引数である複合型を持つ行に展開します。 +JSONオブジェクトは出力行型の列名と一致するフィールドが検査されます。 +(出力列名と関連のないフィールドは無視されます。) +典型的な使い方としては、baseの値が単にNULLで、これはオブジェクトフィールドと一致しない出力列にはNULLがセットされることを意味します。 +しかし、baseNULLでないなら、それが持つ値が一致しない列に使われます。 + +JSON値を出力列のSQL型に変換する際に以下のルールが順に適用されます。 + +すべての場合にJSONのNULL値はSQLのNULLに変換されます。 + +出力列がjson型あるいはjsonb型なら、JSON値は単にそのまま複製されます。 + +出力行が複合(行)型でJSON値がJSONオブジェクトなら、これらのルールを再帰的に適用することによって、オブジェクトのフィールドが出力行型の列に変換されます。 + +同様に、出力行が配列型でJSON値がJSON配列なら、これらのルールを再帰的に適用することによって、JSON配列の要素が出力配列の要素に変換されます。 + +それ以外の場合で、JSON値が文字列なら、その文字列の内容が列のデータ型に対応する入力変換関数に送られます。 + +さもなければ、通常のJSON値のテキスト表現が列のデータ型に対応する入力変換関数に送られます。 + +これらの関数の例ではJSON定数を使用していますが、典型的な使用法はそのjsonまたはjsonb列をFROM句の別のテーブルから外側に参照することです。 +FROM句でjson_populate_recordを書くのは良い練習になります。 +すべての取り出された列を重複した関数呼び出しなしに利用できるからです。 create type subrowtype as (d int, e text); @@ -17157,10 +22446,14 @@ array w/o UK? | t boolean + +jsonb_populate_recordをテストする関数。 +与えられた入力JSONオブジェクトに対してjsonb_populate_recordがエラーなしで終了する場合、すなわち有効な入力ならtrueを、そうでない場合はfalseを返します。 create type jsb_char2 as (a char(2)); @@ -17216,10 +22509,14 @@ ERROR: value too long for type character(2) setof anyelement + +トップレベルのJSONオブジェクトをbase引数である複合型を持つ行の集合に展開します。 +JSON配列の個々の要素は上のjson[b]_populate_recordで説明したように処理されます。 create type twoints as (a int, b int); @@ -17252,6 +22549,7 @@ ERROR: value too long for type character(2) record + +トップレベルのJSONオブジェクトをAS句で定義した複合型を持つ行に展開します。 +(recordを返すすべての関数では、呼び出す問い合わせは明示的にAS句でレコードの構造を定義しなければなりません。) +上のjson[b]_populate_recordで説明した方法で、出力レコードはJSONオブジェクトのフィールドで満たされます。 +入力レコード値がないので、一致しない列は常にNULLで満たされます。 create type myrowtype as (a int, b text); @@ -17291,6 +22594,7 @@ ERROR: value too long for type character(2) setof record + +トップレベルのJSON配列をAS句で定義した複合型を持つ行に展開します。 +(recordを返すすべての関数では、呼び出す問い合わせは明示的にAS句でレコードの構造を定義しなければなりません。) +上のjson[b]_populate_recordで説明した方法で、JSON配列の要素は処理されます。 select * from json_to_recordset('[{"a":1,"b":"foo"}, {"a":"2","c":"bar"}]') as x(a int, b text) @@ -17320,6 +22628,7 @@ ERROR: value too long for type character(2) jsonb + +pathで指定された要素をnew_valueで置き換えてtargetを返します。 +create_if_missingが真なら(デフォルトです)、pathで指定された項目が無い時にnew_valueが追加されます。 +パス中のすべての初期のステップは存在しなければならず、さもなければtargetは変わらないままに返却されます。 +パスの位置についての演算子については、pathの中にある負の整数はJSON配列の終わりから数えます。 +パスの最後のステップが範囲外の配列のインデックスで、create_if_missingが真のときは、インデックスが負なら配列の最初に、正なら配列の最後に新しい値が追加されます。 jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}', '[2,3,4]', false) @@ -17356,6 +22671,7 @@ ERROR: value too long for type character(2) jsonb + +new_valueNULLでないなら、jsonb_setと同じ振る舞いをします。 +そうでなければnull_value_treatmentにしたがいます。 +null_value_treatmentは、'raise_exception''use_json_null''delete_key''return_target'のいずれかでなければなりません。 +デフォルトは'use_json_null'です。 jsonb_set_lax('[{"f1":1,"f2":null},2,null,3]', '{0,f1}', null) @@ -17384,6 +22705,7 @@ ERROR: value too long for type character(2) jsonb + +new_valueを挿入してtargetを返します。 +pathで指定した項目が配列要素で、insert_afterが偽(デフォルトです)ならばnew_valueはその項目の前に挿入され、insert_afterが真であれば後に挿入されます。 +pathで指定した項目がオブジェクトフィールドならば、オブジェクトがすでにそのキーを含んでいない場合にのみnew_valueが挿入されます。 +パス中のすべての初期のステップは存在しなければならず、さもなければtargetは変わらないままに返却されます。 +pathについての演算子について言うと、path内の負の整数はJSON配列の終わりから数えます。 +パスの最後のステップが範囲外の配列のインデックスで、インデックスが負なら配列の最初に、正なら配列の最後に新しい値が追加されます。 jsonb_insert('{"a": [0,1,2]}', '{a, 1}', '"new_value"') @@ -17429,11 +22758,17 @@ ERROR: value too long for type character(2) jsonb + +NULL値を持つすべてのオブジェクトフィールドを、指定されたJSON値から再帰的に削除します。 +strip_in_arraysがtrue(デフォルトはfalse)の場合、NULL配列要素も削除されます。 +それ以外の場合は削除されません。 +単独のNULL値は決して削除されません。 json_strip_nulls('[{"f1":1, "f2":null}, 2, null, 3]') @@ -17455,6 +22790,7 @@ ERROR: value too long for type character(2) boolean + +JSONパスが指定したJSON値に対して項目を返すかどうかをチェックします。 +(これは、述語チェック式ではなく、標準SQLのJSONパス式でのみ有用です。 +なぜなら、それらは常に値を返すからです。) +varsが指定されるなら、それはJSONオブジェクトでなければならず、そのフィールドはjsonpath式に置き換えられる名前を持つ値を提供します。 +silent引数が指定されていてtrueなら、この関数は@?@@演算子が生成するのと同じエラーを抑止します。 jsonb_path_exists('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') @@ -17482,6 +22824,7 @@ ERROR: value too long for type character(2) boolean + +指定したJSON値のJSONパス述語チェックの結果をSQL論理値で返します。 +(これは、パス結果が単一の論理値でない場合、失敗するかNULLを返すため、標準SQLのJSONパス述語ではなく、述語チェック式でのみ有用です)。 +オプションのvarssilent引数は、jsonb_path_existsと同じように動作します。 jsonb_path_match('{"a":[1,2,3,4,5]}', 'exists($.a[*] ? (@ >= $min && @ <= $max))', '{"min":2, "max":4}') @@ -17508,6 +22855,7 @@ ERROR: value too long for type character(2) setof jsonb + +指定されたJSON値のJSONパスによって戻されるすべてのJSON項目を戻します。 +標準SQLのJSONパス式の場合、targetから選択されたJSON値を返します。 +述語チェック式の場合、述語チェックの結果を返します。 +結果はtruefalsenullのいずれかです。 +オプションのvarssilent引数はjsonb_path_existsと同じように動作します。 select * from jsonb_path_query('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') @@ -17542,10 +22896,14 @@ ERROR: value too long for type character(2) jsonb + +指定されたJSON値のJSONパスによって返されるすべてのJSON項目を、JSON配列として返します。 +パラメータはjsonb_path_queryと同じです。 jsonb_path_query_array('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') @@ -17562,11 +22920,16 @@ ERROR: value too long for type character(2) jsonb + +指定されたJSON値のJSONパスによって返される最初のJSON項目を返します。 +結果がない場合はNULLです。 +パラメータはjsonb_path_queryと同じです。 jsonb_path_query_first('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}') @@ -17611,6 +22974,7 @@ ERROR: value too long for type character(2) jsonb + +これらの関数は、時間帯を考慮する日時値の比較をサポートすることを除いて、上で述べた、_tz接尾を除いた片割れの関数のように動作します。 +以下の例では日付のみの値2015-08-02を時間帯付きタイムスタンプとして解釈することが必要で、結果は設定に依存します。 +この依存性のために、これらの関数は安定(stable)、として印付けされており、インデックスにはこれらの関数は使えないことを意味します。 +これらの関数の片割れは不変(immutable)なので、インデックスで使えます。しかし、そうした比較を要求されるとエラーを吐きます。 jsonb_path_exists_tz('["2015-08-01 12:00:00-05"]', '$[*] ? (@.datetime() < "2015-08-02".datetime())') @@ -17638,7 +23007,10 @@ ERROR: value too long for type character(2) text + +与えられたJSON値を整形されたインデント付きテキストに変換します。 jsonb_pretty('[{"f1":1,"f2":null}, 2]') @@ -17671,6 +23043,7 @@ ERROR: value too long for type character(2) text + +トップレベルのJSON値の型をテキスト文字列として返します。 +可能な型は次のとおりです。 +objectarraystringnumberbooleannull。 +(nullの結果をSQLのNULLと混同してはいけません。以下の例をご覧ください。) json_typeof('-123.4') @@ -17698,22 +23076,33 @@ ERROR: value too long for type character(2) + + SQL/JSONパス言語 SQL/JSON path language + + SQL/JSONパス言語 + + +SQL/JSONパス式は、XMLコンテンツへのアクセスで使用されるXPath式同様、JSON値から取り出す項目を指定します。 +PostgreSQLではパス式はjsonpathデータ型として実装されており、で説明されているすべての要素を使うことができます。 + +JSON問い合わせ関数と演算子は与えられたパス式をpath engineに渡して評価します。 +式が問い合わせ対象のJSONデータにマッチすれば、関連するSQL/JSON項目が返却されます。 +一致しない場合、結果はNULLfalse、または関数によって異なるエラーになります。 +パス式はSQL/JSONパス言語で書かれ、算術式と関数を含むことができます。 + +パス式はjsonpathデータ型で認められた一連の要素からなります。 +パス式は通常左から右へと評価されますが、括弧を使って演算の順序を変更することができます。 +評価が成功すれば、一連のJSON項目が生成され、評価結果が指定した計算を完了したJSON問い合わせ関数に戻されます。 + +問い合わせ対象(context item)のJSONデータを参照するには、パス式内で$値を使います。 +パスの最初の要素は常に$でなければなりません。 +複数のアクセサ演算子をその後に記述することもできます。 +この後に、JSON構造のレベルを1つずつ下ってコンテキスト項目のサブ項目を取得するアクセサ演算子を1つ以上指定することができます。 +各アクセサ演算子は、前の評価ステップの結果に作用し、各入力項目から0個、1個、または複数の出力項目を生成します。 + +たとえば、次のようなパースしたいGPSトラッカーからのJSONデータがあるとします。 SELECT '{ "track": { @@ -17767,17 +23176,25 @@ SELECT '{ } }' AS json \gset + +(上記の例は、psqlにコピー&ペーストして、以下の例の設定を行うことができます。 +そうすると、psql:'json'を適切に引用符付けされた文字列定数に展開し、JSON値を含めます。) + +使用可能なトラックセグメントを取り出すには、.keyアクセサ演算子を使用して、周辺のJSONオブジェクトを下っていく必要があります。 +例: => select jsonb_path_query(:'json', '$.track.segments'); jsonb_path_query @@ -17787,10 +23204,14 @@ SELECT '{ + +配列の内容を取り出すには、典型的には[*]演算子を使います。 +次の例は、使用可能なすべてのトラックセグメントの位置座標を返します。 => select jsonb_path_query(:'json', '$.track.segments[*].location'); jsonb_path_query @@ -17798,6 +23219,7 @@ SELECT '{ [47.763, 13.4034] [47.706, 13.2635] + +ここでは、JSON入力値($)全体から始め、.trackアクセサが"track"オブジェクトキーに関連付けられたJSONオブジェクトを選択し、.segmentsアクセサがそのオブジェクト内の"segments"キーに関連付けられたJSON配列を選択し、[*]アクセサがその配列の各要素を(一連の項目を生成しながら)選択し、.locationアクセサがそれらのオブジェクトのそれぞれの中の"location"キーに関連付けられたJSON配列を選択しました。 +この例では、それらのオブジェクトのそれぞれに"location"キーがありましたが、もしそうでなければ、.locationアクセッサは単にその入力項目に対して何の出力も生成しなかったでしょう。 + +最初のセグメントの座標だけを返すには、[]アクセサ演算子の中で対応する添え字を指定することができます。 +JSON配列インデックスは0スタートであることに注意してください。 => select jsonb_path_query(:'json', '$.track.segments[0].location'); jsonb_path_query @@ -17826,27 +23255,39 @@ SELECT '{ + +各段階でのパス評価結果はに列挙されている一つ以上のjsonpath演算子とメソッドで処理することができます。 +各々のメソッド名の前にピリオドを付けなければなりません。 +たとえば配列の大きさを得ることができます。 => select jsonb_path_query(:'json', '$.track.segments.size()'); jsonb_path_query ------------------ 2 + +パス式内のjsonpath演算子とメソッドを使用する他の例については以下のを参照してください。 + +パスには、SQLのWHERE句のように働くフィルタ式を含めることもできます。 +フィルタ式はクェスチョンマークで始まり、カッコ内に条件を記述します。 ? (condition) @@ -17854,6 +23295,7 @@ SELECT '{ + +フィルタ式はそれを適用するパス評価段階の直後に指定しなければなりません。 +この段階の結果は、指定した条件を満たす項目だけが含まれるようにフィルタされます。 +SQL/JSONは3値論理を定義しており、条件はtruefalseunknownのどれかを生成します。 +unknownは値はSQLのNULLと同じ役割を果たし、is unknown述語で評価できます。 +その後の評価段階ではtrueを返すフィルタ式に対応する項目だけが使われます。 + +フィルタ式内で利用できる関数と演算子はにリストされています。 +フィルタ式内では、考慮する必要のある値は@変数で示します。(つまり以前のパスステップの結果の一つです。) +コンポーネント項目を取得するためにアクセサ演算子を@の後に記述することができます。 + +たとえば130より高いすべての心拍数を取り出したいとします。 +これを実現するには、次のようにします。 => select jsonb_path_query(:'json', '$.track.segments[*].HR ? (@ > 130)'); jsonb_path_query @@ -17887,10 +23344,14 @@ SELECT '{ + +そうした値を持つセグメントの開始時刻を得たい場合は、開始時刻を選択する前に無関係のセグメントを取り除く必要があります。 +そうすることにより前の段階にフィルタ式が適用されるので、その条件で適用されるパスは異なります。 => select jsonb_path_query(:'json', '$.track.segments[*] ? (@.HR > 130)."start time"'); jsonb_path_query @@ -17900,9 +23361,13 @@ SELECT '{ + +必要なら複数のフィルタ式を順に使用することができます。 +次の例では、関連する座標と高い心拍数値を持つ位置を含むすべてのセグメントの開始時間を選択します。 => select jsonb_path_query(:'json', '$.track.segments[*] ? (@.location[1] < 13.4) ? (@.HR > 130)."start time"'); jsonb_path_query @@ -17912,9 +23377,13 @@ SELECT '{ + +異なる入れ子レベルに対してフィルタ式を適用することもできます。 +次の例では、まず位置ですべてのセグメントをフィルタし、もしあれば高い心拍数値を返します。 => select jsonb_path_query(:'json', '$.track.segments[*] ? (@.location[1] < 13.4).HR ? (@ > 130)'); jsonb_path_query @@ -17924,9 +23393,13 @@ SELECT '{ + +フィルタ式をネストして、フィルタ式を相互にネストすることもできます。 +次の例では、トラックに高心拍数値のセグメントが含まれている場合はそのサイズを返し、それ以外の場合は空のシーケンスを返します。 => select jsonb_path_query(:'json', '$.track ? (exists(@.segments[*] ? (@.HR > 130))).segments.size()'); jsonb_path_query @@ -17936,15 +23409,25 @@ SELECT '{ + + 標準SQLとの違い + +PostgreSQLのSQL/JSONパス言語の実装はSQL/JSON標準と次の点が異なります。 + + ブール述語チェック式 + +標準SQLの拡張として、PostgreSQLパス式はブール述語になりますが、標準SQLでは述語はフィルタ内でのみ許されます。 +標準SQLのパス式は、問い合わせられたJSON値の関連する要素を返しますが、述語チェック式は述語の単一の3値jsonb結果truefalsenullを返します。 +たとえば、次の標準SQLフィルタ式を記述できます。 => select jsonb_path_query(:'json', '$.track.segments ?(@[*].HR > 130)'); jsonb_path_query -----------------------------------------------------------&zwsp;---------------------- {"HR": 135, "location": [47.706, 13.2635], "start time": "2018-10-14 10:39:21"} + +類似述語チェック式は単にtrueを返し、一致が存在することを示します。 => select jsonb_path_query(:'json', '$.track.segments[*].HR > 130'); jsonb_path_query @@ -17972,52 +23462,77 @@ SELECT '{ + +述語チェック式は@@演算子(およびjsonb_path_match関数)で必要であり、@?演算子(またはjsonb_path_exists関数)では使用すべきではありません。 + + 正規表現の解釈 + +で述べるように、like_regexフィルタで使用される正規表現パターンの解釈には些細な違いがあります。 + + 厳密モードと非厳密モード + +JSONデータを問い合わせる際、パス式は実際のJSONデータ構造に一致しないかも知れません。 +存在しないオブジェクトのメンバあるいは配列要素へのアクセスは構造上のエラーとして定義されています。 +SQL/JSONパス式には構造上のエラーを扱うための2つのモードがあります。 + +非厳密(lax)モード(デフォルト)— パスエンジンは指定したパスを問い合わせデータに暗黙的に適合させます。 +以下に説明するように修正できない構造エラーは抑制され、一致は生成されません。 + +厳密(strict)モード — 構造上のエラーがあるとエラーが発生します。 + +非厳密モードは、JSONデータが期待されるスキーマに沿わないときにJSON文書とパス式のマッチングを助けます。 +あるオペランドが操作の要件に合わないときにはそれをSQL/JSON配列にまとめたり、あるいは操作を行う前にそれをSQL/JSONシーケンスに展開することもできます。 +また非厳密モードにおいては、比較演算子は自動的にオペランドを展開し、SQL/JSON配列をそのまま比較することができます。 +大きさ1の配列はその単独要素と同じものとして扱われます。 +自動展開は以下の場合に行われません。 + +それぞれ配列の型、要素数を返すtype()size()をパス式が含む。 + +問い合わせ対象のJSONデータが入れ子の配列を含む。 +この場合はもっとも外側の配列のみが展開され、内側の配列は変わりません。 +ですから、それぞれの評価段階において1レベルのみに暗黙的な展開が行われます。 + +たとえば、上述のGPSデータに問い合わせする場合、非厳密モードでは配列のセグメントを含んでいるという事実から抽出できます。 => select jsonb_path_query(:'json', 'lax $.track.segments.location'); jsonb_path_query @@ -18060,15 +23592,21 @@ SELECT '{ + +厳密モードでは、指定されたパスは問い合わせ対象のJSONドキュメントの構造と正確に一致する必要があるため、このパス式を使用するとエラーが発生します。 => select jsonb_path_query(:'json', 'strict $.track.segments.location'); ERROR: jsonpath member accessor can only be applied to an object + +非厳密モードと同じ結果を得るには、segments配列を明示的に展開する必要があります。 => select jsonb_path_query(:'json', 'strict $.track.segments[*].location'); jsonb_path_query @@ -18079,9 +23617,13 @@ ERROR: jsonpath member accessor can only be applied to an object + +非厳密モードの展開動作は、驚くべき結果をもたらす可能性があります。 +たとえば、.**アクセサを使用する次の問い合わせは、すべてのHR値を2回選択します。 => select jsonb_path_query(:'json', 'lax $.**.HR'); jsonb_path_query @@ -18091,12 +23633,18 @@ ERROR: jsonpath member accessor can only be applied to an object 73 135 + +これは.**アクセサがsegmentsとその各々の要素の両方を検索するからです。 +一方、.HRアクセサは非厳密モードでは自動的に配列を展開します。 +予期しない結果を避けるには、.**アクセサを厳密モードでのみ使うことをお勧めします。 +次の問い合わせはHRの各値を一度だけ検索します。 => select jsonb_path_query(:'json', 'strict $.**.HR'); jsonb_path_query @@ -18107,8 +23655,12 @@ ERROR: jsonpath member accessor can only be applied to an object + +配列の展開は予期しない結果をもたらす可能性もあります。 +location配列をすべて選択する次の例を考えてみましょう。 => select jsonb_path_query(:'json', 'lax $.track.segments[*].location'); jsonb_path_query @@ -18117,9 +23669,13 @@ ERROR: jsonpath member accessor can only be applied to an object [47.706, 13.2635] (2 rows) + +予想どおり、配列全体が返されます。 +しかし、フィルタ式を適用すると、配列が展開され、各項目が評価されて、式に一致する項目のみが返されます。 => select jsonb_path_query(:'json', 'lax $.track.segments[*].location ?(@[*] > 15)'); jsonb_path_query @@ -18128,8 +23684,12 @@ ERROR: jsonpath member accessor can only be applied to an object 47.706 (2 rows) + +これは、完全な配列がpath式によって選択されるという事実にもかかわらずです。 +厳密モードを使用して、配列の選択を復元します。 => select jsonb_path_query(:'json', 'strict $.track.segments[*].location ?(@[*] > 15)'); jsonb_path_query @@ -18142,9 +23702,13 @@ ERROR: jsonpath member accessor can only be applied to an object + + SQL/JSONパス演算子とメソッド + +jsonpathで利用可能な演算子とメソッドを示します。 +単項演算子とメソッドは以前のパスステップから生じた複数の値に適用できますが、二項演算子(加算など)は単一の値にしか適用できないことに注意してください。 +非厳密モードでは、配列に適用されるメソッドは配列内の各値に対して実行されます。 +例外は.type().size()で、配列自分自身に適用されます。
+ + <type>jsonpath</type>演算子とメソッド + +演算子/メソッド + +説明 + +例 @@ -18179,7 +23760,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +加算 jsonb_path_query('[2]', '$[0] + 3') @@ -18193,8 +23777,11 @@ ERROR: jsonpath member accessor can only be applied to an object number + +単項のプラス(演算なし)。加算と違って、複数の値に渡って適用できます。 jsonb_path_query_array('{"x": [2,3,4]}', '+ $.x') @@ -18208,7 +23795,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +減算 jsonb_path_query('[2]', '7 - $[0]') @@ -18222,8 +23812,11 @@ ERROR: jsonpath member accessor can only be applied to an object number + +負符号。減算と違って、複数の値に渡って適用できます。 jsonb_path_query_array('{"x": [2,3,4]}', '- $.x') @@ -18237,7 +23830,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +乗算 jsonb_path_query('[4]', '2 * $[0]') @@ -18251,7 +23847,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +除算 jsonb_path_query('[8.5]', '$[0] / 2') @@ -18265,7 +23864,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +剰余(残り) jsonb_path_query('[32]', '$[0] % 10') @@ -18279,7 +23881,10 @@ ERROR: jsonpath member accessor can only be applied to an object string + +JSON項目の型(json_typeofを参照) jsonb_path_query_array('[1, "2", {}]', '$[*].type()') @@ -18293,8 +23898,11 @@ ERROR: jsonpath member accessor can only be applied to an object number + +JSON項目の大きさ(配列の要素数。配列でなければ1) jsonb_path_query('{"m": [11, 15]}', '$.m.size()') @@ -18308,7 +23916,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +JSONのブール値、数値、または文字列から変換されたブール値。 jsonb_path_query_array('[1, "yes", false]', '$[*].boolean()') @@ -18322,8 +23933,11 @@ ERROR: jsonpath member accessor can only be applied to an object string + +JSONのブール値、数値、文字列、または日時から変換された文字列値。 jsonb_path_query_array('[1.23, "xyz", false]', '$[*].string()') @@ -18341,8 +23955,11 @@ ERROR: jsonpath member accessor can only be applied to an object number + +JSON数値あるいは文字列から変換した概算の浮動小数点数 jsonb_path_query('{"len": "1.9"}', '$.len.double() * 2') @@ -18356,7 +23973,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +引数より大きいか等しく、与えられた数に最も近い整数 jsonb_path_query('{"h": 1.3}', '$.h.ceiling()') @@ -18370,7 +23990,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +引数より小さいか等しく、与えられた数に最も近い整数 jsonb_path_query('{"h": 1.7}', '$.h.floor()') @@ -18384,7 +24007,10 @@ ERROR: jsonpath member accessor can only be applied to an object number + +与えられた数の絶対値 jsonb_path_query('{"z": -0.3}', '$.z.abs()') @@ -18398,7 +24024,10 @@ ERROR: jsonpath member accessor can only be applied to an object bigint + +JSONの数値または文字列から変換された大きな整数値。 jsonb_path_query('{"len": "9876543219"}', '$.len.bigint()') @@ -18412,9 +24041,12 @@ ERROR: jsonpath member accessor can only be applied to an object decimal + +JSONの数値または文字列から変換された丸められた10進数値(精度および位取りは整数値である必要があります)。 jsonb_path_query('1234.5678', '$.decimal(6, 2)') @@ -18428,7 +24060,10 @@ ERROR: jsonpath member accessor can only be applied to an object integer + +JSONの数値または文字列から変換された整数値。 jsonb_path_query('{"len": "12345"}', '$.len.integer()') @@ -18442,7 +24077,10 @@ ERROR: jsonpath member accessor can only be applied to an object numeric + +JSONの数値または文字列から変換されたNumeric値。 jsonb_path_query('{"len": "123.45"}', '$.len.number()') @@ -18454,10 +24092,16 @@ ERROR: jsonpath member accessor can only be applied to an object string . datetime() datetime_type + +(注記を参照) + +文字列から変換した日時値 jsonb_path_query('["2015-8-1", "2015-08-12"]', '$[*] ? (@.datetime() < "2015-08-2".datetime())') @@ -18469,11 +24113,17 @@ ERROR: jsonpath member accessor can only be applied to an object string . datetime(template) datetime_type + +(注記を参照) + +指定のto_timestampテンプレートを使って文字列から変換した日時値 jsonb_path_query_array('["12:30", "18:40"]', '$[*].datetime("HH24:MI")') @@ -18487,7 +24137,10 @@ ERROR: jsonpath member accessor can only be applied to an object date + +文字列から変換された日付値。 jsonb_path_query('"2023-08-15"', '$.date()') @@ -18501,7 +24154,10 @@ ERROR: jsonpath member accessor can only be applied to an object time without time zone + +文字列から変換した時間帯のない時刻値 jsonb_path_query('"12:34:56"', '$.time()') @@ -18515,8 +24171,11 @@ ERROR: jsonpath member accessor can only be applied to an object time without time zone + +文字列から変換された時間帯のない時間の値。分数の秒は指定された精度に調整されます。 jsonb_path_query('"12:34:56.789"', '$.time(2)') @@ -18530,7 +24189,10 @@ ERROR: jsonpath member accessor can only be applied to an object time with time zone + +文字列から変換されたタイムゾーン値を持つ時間。 jsonb_path_query('"12:34:56 +05:30"', '$.time_tz()') @@ -18544,8 +24206,11 @@ ERROR: jsonpath member accessor can only be applied to an object time with time zone + +文字列から変換された時間帯を持つ時間。分数の秒は指定された精度に調整されます。 jsonb_path_query('"12:34:56.789 +05:30"', '$.time_tz(2)') @@ -18559,7 +24224,10 @@ ERROR: jsonpath member accessor can only be applied to an object timestamp without time zone + +文字列から変換された時間帯なしのタイムスタンプ jsonb_path_query('"2023-08-15 12:34:56"', '$.timestamp()') @@ -18573,8 +24241,11 @@ ERROR: jsonpath member accessor can only be applied to an object timestamp without time zone + +文字列から変換された時間帯なしのタイムスタンプ値。分数の秒数は指定された精度に調整されます。 jsonb_path_query('"2023-08-15 12:34:56.789"', '$.timestamp(2)') @@ -18588,7 +24259,10 @@ ERROR: jsonpath member accessor can only be applied to an object timestamp with time zone + +文字列から変換された時間帯を持つタイムスタンプ。 jsonb_path_query('"2023-08-15 12:34:56 +05:30"', '$.timestamp_tz()') @@ -18602,8 +24276,11 @@ ERROR: jsonpath member accessor can only be applied to an object timestamp with time zone + +文字列から変換された時間帯を持つタイムスタンプ値。分数の秒数は指定された精度に調整されます。 jsonb_path_query('"2023-08-15 12:34:56.789 +05:30"', '$.timestamp_tz(2)') @@ -18617,11 +24294,16 @@ ERROR: jsonpath member accessor can only be applied to an object array + +以下の3つのフィールドを含むオブジェクトの配列で表現したオブジェクトのキー/値ペア。 +"key""value""id"。 +"id"はキー/値ペアが属するオブジェクトのユニーク識別子です。 jsonb_path_query_array('{"x": "20", "y": 32}', '$.keyvalue()') @@ -18634,25 +24316,37 @@ ERROR: jsonpath member accessor can only be applied to an object + +datetime()datetime(template)の結果型はdatetimetztimetimestamptz、あるいはtimestampです。 +両方のメソッドは結果型を動的に決定します。 + +datetime()メソッドは入力文字列をdatetimetztimetimestamptztimestampのISO形式に対して順にマッチを試みます。 +最初にマッチした形式で停止し、関連するデータ型を出力します。 + +datetime(template)メソッドは与えられたテンプレート文字列にあるフィールドに従って結果型を決定します。 + +datetime()datetime(template)to_timestampSQL関数と同じ解析ルール(参照)を用いますが、3つの例外があります。 +一番目に、これらのメソッドは一致しないテンプレートパターンを許容しません。二番目に次の区切り文字のみを許容します。負符号、ピリオド、斜線(スラッシュ)、カンマ、アポストロフィー、セミコロン、コロン、空白、です。 +三番目にテンプレート文字列中の区切り文字は正確に入力文字列と一致しなければなりません。 + +異なる日時型の比較が必要なら、暗黙的なキャストが適用されます。 +date値はtimestampあるいはtimestamptzにキャストできます。 +timestamptimestamptzに、timetimetzにキャストできます。 +しかし、これらの変換は最初のものを除くすべてが現在の設定に依存します。ですから時間帯を認識するjsonpath関数中でのみ実行可能です。 +同様に、文字列を日付/時刻型に変換する他の日付/時刻関連のメソッドも、現在の設定を含む可能性があるこのキャストを行います。 +したがって、これらの変換は、timezoneを意識したjsonpath関数内でのみ実行できます。 + +に利用可能なフィルタ式要素を示します。
+ + <type>jsonpath</type>フィルタ式要素 + +述語/値 + +説明 + +例 @@ -18708,8 +24429,11 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +等値比較(これと他の比較演算子はすべてのJSONスカラ値で使えます) jsonb_path_query_array('[1, "a", 1, 3]', '$[*] ? (@ == 1)') @@ -18731,7 +24455,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +非等値比較 jsonb_path_query_array('[1, 2, 1, 3]', '$[*] ? (@ != 1)') @@ -18749,7 +24476,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +未満比較 jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ < 2)') @@ -18763,7 +24493,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +以下比較 jsonb_path_query_array('["a", "b", "c"]', '$[*] ? (@ <= "b")') @@ -18777,7 +24510,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +より大きい比較 jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ > 2)') @@ -18791,7 +24527,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +以上比較 jsonb_path_query_array('[1, 2, 3]', '$[*] ? (@ >= 2)') @@ -18805,7 +24544,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +JSON定数 jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == true)') @@ -18819,7 +24561,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +JSON定数 jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == false)') @@ -18833,8 +24578,11 @@ ERROR: jsonpath member accessor can only be applied to an object value + +JSON定数null(SQLとは違ってnullとの比較は通常通り動作することに注意してください。) jsonb_path_query('[{"name": "Mary", "job": null}, {"name": "Michael", "job": "driver"}]', '$[*] ? (@.job == null) .name') @@ -18848,7 +24596,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +論理AND jsonb_path_query('[1, 3, 7]', '$[*] ? (@ > 1 && @ < 5)') @@ -18862,7 +24613,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +論理OR jsonb_path_query('[1, 3, 7]', '$[*] ? (@ < 1 || @ > 5)') @@ -18876,7 +24630,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +論理NOT jsonb_path_query('[1, 3, 7]', '$[*] ? (!(@ < 5))') @@ -18890,7 +24647,10 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +論理条件がunknownであるかどうかを検査します。 jsonb_path_query('[-1, 2, 7, "foo"]', '$[*] ? ((@ > 0) is unknown)') @@ -18904,10 +24664,14 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +最初のオペランドが2番目のオペランドで与えられる正規表現にマッチするかどうか検査します。 +オプションでflag文字列で記述される変更を伴います。(を参照してください。) jsonb_path_query_array('["abc", "abd", "aBdC", "abdacb", "babc"]', '$[*] ? (@ like_regex "^ab.*c")') @@ -18925,8 +24689,11 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +2番目の文字列が1番目のオペランドの最初の部分文字列かどうかを検査します。 jsonb_path_query('["John Smith", "Mary Stone", "Bob Johnson"]', '$[*] ? (@ starts with "John")') @@ -18940,10 +24707,14 @@ ERROR: jsonpath member accessor can only be applied to an object boolean + +パス式が少なくとも一つのSQL/JSON項目とマッチするかどうかを検査します。 +パス式がエラーとなる場合はunknownを返します。2番目の例は厳密モードでキーが存在しないエラーを回避するためにこれを使っています。 jsonb_path_query('{"x": [1, 2], "y": [2, 4]}', 'strict $.* ? (exists (@ ? (@[*] > 2)))') @@ -18961,24 +24732,36 @@ ERROR: jsonpath member accessor can only be applied to an object + + SQL/JSON正規表現 LIKE_REGEX in SQL/JSON + + LIKE_REGEX + SQL/JSONにおける + + +SQL/JSONパス式ではlike_regexフィルタを使ってテキストを正規表現にマッチさせることができます。 +たとえば、次のSQL/JSONパス式問い合わせは、英語の母音で始まる配列内のすべての文字列に大文字小文字を無視してマッチするでしょう。 $[*] ? (@ like_regex "^[aeiou]" flag "i") + +オプションのflag文字列は一つ以上の文字を含むことができます。 +iは大文字小文字を無視したマッチ、m^$で改行にマッチ、s.が改行にマッチ、qはパターン全体を参照します。(振る舞いを単純な部分文字列マッチとします) + +SQL/JSON標準は正規表現の定義を、XQuery標準を使用するLIKE_REGEX演算子から借りています。 +PostgreSQLは今の所LIKE_REGEX演算子をサポートしていません。 +ですから、like_regexフィルタはで説明されているPOSIX正規表現で実装されています。 +このことにより、で列挙されているSQL/JSON標準の振る舞いとの小さな違いが生じます。 +しかし、ここで述べているフラグ文字の非互換性はSQL/JSONには適用されないことに注意してください。SQL/JSONは、XQueryのフラグ文字をPOSIXエンジンが期待するのと一致するように解釈するからです。 + +like_regexのパターン引数はで説明されているルールにしたがって書かれたJSONパス文字列リテラルであることに注意してください。 +これは、正規表現で使用するすべてのバックスラッシュを二重に書かなければならないことを意味します。 +たとえば、数字のみを含むroot文書の文字列値にマッチさせるには以下のようにします。 $.* ? (@ like_regex "^\\d+$") @@ -19019,8 +24817,12 @@ $.* ? (@ like_regex "^\\d+$") + + SQL/JSON問い合わせ関数 + +で記述されたSQL/JSON関数JSON_EXISTS()JSON_QUERY()JSON_VALUE()は、JSON文書への問い合わせに使用できます。 +これらの各関数は、path_expression(SQL/JSONパス問い合わせ)をcontext_item(文書)に適用します。 +path_expressionの内容の詳細については、を参照してください。 +path_expressionはリファレンス変数にすることもできます。その値は、各関数でサポートされているPASSING句でそれぞれの名前で指定されます。 +context_itemには、jsonbの値、または文字の並びにキャストできるjsonbを指定できます。
+ + SQL/JSON問い合わせ関数 + +関数の呼び出し形式 + +説明 + +例 @@ -19066,13 +24886,17 @@ $.* ? (@ like_regex "^\\d+$") + +context_itemに適用されたSQL/JSON path_expressionが項目を生成する場合は真を返し、それ以外の場合は偽を返します。 + +ON ERROR句は、path_expressionの評価中にエラーが発生した場合の動作を指定します。 +ERRORを指定すると、適切なメッセージとともにエラーを引き起こします。 +他のオプションにはboolean値であるFALSEまたはTRUE、あるいは実際にはSQL NULLであるUNKNOWNの値を返すものがあります。 +ON ERROR句が指定されていない場合のデフォルトでは、boolean値のFALSEを返します。 + +例: JSON_EXISTS(jsonb '{"key1": [1,2,3]}', 'strict $.key1[*] ? (@ > $x)' PASSING 2 AS x) @@ -19121,20 +24953,27 @@ ERROR: jsonpath array subscript is out of bounds + +SQL/JSONpath_expressioncontext_itemに適用した結果を返します。 + +デフォルトでは、結果はjsonb型の値として返されますが、RETURNING句を使って、結果が正常に強制される他の型を返すことができます。 + +パス式が複数の結果を返す場合、それらの値を適切なJSON文字列にするために、WITH WRAPPER句を使用してこれらの値をラップする必要があります。 +なぜなら、デフォルトの動作は、WITHOUT WRAPPERが指定されているかのようにラップしないからです。 +WITH WRAPPER句は、デフォルトではWITH UNCONDITIONAL WRAPPERを意味すると解釈されます。これは、単一の結果値であってもラップされることを意味します。 +複数の値が存在する場合にのみラッパーを適用するには、WITH CONDITIONAL WRAPPERを指定します。 +WITHOUT WRAPPERが指定されていて、結果に複数の値が含まれると、エラーとして扱われます。 + +結果がスカラ文字列の場合、デフォルトでは戻り値は引用符で囲まれ、有効なJSON値になります。 +これは、KEEP QUOTESを指定することで明示的にできます。 +逆に、OMIT QUOTESを指定することで引用符を省略できます。 +結果が有効なJSON値である保証には、WITH WRAPPERも指定されている場合、OMIT QUOTESは指定できません。 + +ON EMPTY句は、path_expressionを評価した結果空の集合が生成される場合の動作を指定します。 +ON ERROR句は、path_expressionを評価した際、結果値をRETURNING型に強制した際、またはpath_expression評価で空の集合が返されON EMPTY式を評価した際にエラーが発生する場合の動作を指定します。 + +ON EMPTYON ERRORの両方で、ERRORを指定すると、適切なエラーとともにメッセージがスローされます。 +他のオプションにはSQL NULL、空の配列(EMPTY ARRAY)、空のオブジェクト(EMPTY OBJECT)、jsonbまたはRETURNINGで指定されたタイプに強制できるユーザ指定の式(DEFAULT expression)があります。 +ON EMPTYあるいはON ERROR句が指定されていない場合のデフォルトでは、SQL NULL値を返します。 + +例: JSON_QUERY(jsonb '[1,[2,3],null]', 'lax $[*][$off]' PASSING 1 AS off WITH CONDITIONAL WRAPPER) @@ -19220,46 +25083,66 @@ DETAIL: Missing "]" after array dimensions. + +SQL/JSON path_expressioncontext_itemに適用した結果を返します。 + +JSON_VALUE()を使用するのは、抽出された値が単一のSQL/JSONスカラ項目であると予想される場合のみです。複数の値の取得はエラーとして扱われます。 +抽出された値がオブジェクトまたは配列であると予想される場合は、代わりにJSON_QUERY関数を使用します。 + +デフォルトでは、結果は単一のスカラ値である必要があり、text型の値として返されます。 +ただし、RETURNING句は、結果が正常に強制できる他の型として使用できます。 + +ON ERROR句とON EMPTY句のセマンティクスは、JSON_QUERYの説明で説明したものと似ていますが、エラーを発生する代わりに返される値の集合が異なります。 + +JSON_VALUEによって返されるスカラ文字列は、JSON_QUERYOMIT QUOTESを指定するのと同じように、常に引用符が削除されることに注意してください。 + +例: JSON_VALUE(jsonb '"123.45"', '$' RETURNING float) @@ -19284,20 +25167,27 @@ DETAIL: Missing "]" after array dimensions.
+ +context_item式は、まだjsonb型でない場合、暗黙キャストによってjsonbに変換されます。 +ただし、その変換中に発生する解析エラーは、無条件に発生します。つまり、(指定または暗黙的な)ON ERROR句に従って処理されません。 + +path_expressionがSQLnullを返す場合、JSON_VALUE()はSQL NULLを返します。一方、JSON_QUERY()はJSON nullをそのまま返します。
@@ -19309,6 +25199,7 @@ DETAIL: Missing "]" after array dimensions. + +JSON_TABLEJSONデータを問い合わせ、結果を通常のSQLテーブルとしてアクセスできるリレーショナルビューとして表示するSQL/JSON関数です。 +JSON_TABLEは、SELECTUPDATE、またはDELETEFROM句内で使用できます。また、MERGE文のデータソースとしても使用できます。 + +JSONデータを入力として、JSON_TABLEはJSONパス式を使用して、提供されたデータの一部を抽出し、構築されたビューの行パターンとして使用します。 +行パターンで指定された各SQL/JSON値は、構築されたビューの別々の行のソースとして機能します。 + +行パターンを列に分割するために、JSON_TABLEは作成されたビューのスキーマを定義するCOLUMNS句を提供します。 +各列に対して、個別のJSONパス式を指定して、行パターンに対して評価されるようにできます。これは、指定された出力行の特定の列の値になります。 + +行パターンのネストされたレベルに格納されたJSONデータは、NESTED PATH句を使用して抽出できます。 +各NESTED PATH句は、行パターンのネストされたレベルからのデータを使用して1つ以上の列を生成するために使用できます。 +これらの列は、最上位のCOLUMNS句と同様のCOLUMNS句を使用して指定できます。 +NESTED COLUMNSから構成される行は子行child rows)と呼ばれ、親のCOLUMNS句で指定された列から構成される行に対して結合され、最終的なビューの行が得られます。 +子列自体はNESTED PATH指定を含むことができ、任意のネストレベルにあるデータを抽出することができます。 +同じレベルにある複数のNESTED PATHによって生成された列は、互いに兄弟siblings)と見なされ、親行と結合された後の行はUNIONを使用して結合されます。 + +JSON_TABLEが生成する行は、それを生成した行に横方向に結合されるため、JSONデータを保持する元のテーブルに構築されたビューを明示的に結合する必要はありません。 + +構文は次のとおりです。 @@ -19372,7 +25288,10 @@ JSON_TABLE ( ) + +ここでjson_table_columnは次のとおりです。 name FOR ORDINALITY | name type @@ -19388,7 +25307,10 @@ where json_table_column is: + +各構文要素について、以下でさらに詳しく説明します。 @@ -19398,6 +25320,7 @@ where json_table_column is: + +context_itemは問い合わせの入力ドキュメントを指定し、path_expressionは問い合わせを定義するSQL/JSONパス式であり、json_path_namepath_expressionのオプションの名前です。 +オプションのPASSING句は、path_expressionで言及されている変数にデータ値を提供します。 +前述の要素を使用して入力データを評価した結果はrow patternと呼ばれ、構築されたビューの行値のソースとして使用されます。 @@ -19418,11 +25345,16 @@ where json_table_column is: + +構築されたビューのスキーマを定義するCOLUMNS句。 +この句では、各列に対して、行パターンに対してJSONパス式を適用することによって得られるSQL/JSON値を指定できます。 +json_table_columnには、次の種類があります。 @@ -19432,9 +25364,13 @@ where json_table_column is: + +1から始まる連続した行番号を提供する序数列を追加します。 +各NESTED PATH(下記参照)は、ネストされた序数列に対してそれぞれ独自のカウンタを持ちます。 @@ -19447,12 +25383,16 @@ where json_table_column is: + +指定されたtypeに強制変換した後、ビューの出力行にpath_expressionを適用して得られたSQL/JSON値を挿入します。 + +FORMAT JSONを指定すると、値が有効なjsonオブジェクトであることが明示的に指定されます。 +FORMAT JSONを指定するのは、typebpcharbyteacharacter varyingnamejsonjsonbtext、またはこれらの型のドメインのいずれかである場合に限られます。 + +オプションで、WRAPPERQUOTES句を指定して出力をフォーマットすることもできます。 +引用符なしのリテラルは有効なjson値を構成しないため、QUOTESを指定すると、FORMAT JSONが上書きされることに注意してください。 + +オプションで、ON EMPTYON ERROR句を使用して、JSONパス評価の結果が空の場合と、JSONパスの評価中あるいはSQL/JSON値を指定された型に強制変換したときにエラーが発生した場合に対して、エラーを発生するか、指定された値を返すかをそれぞれ指定できます。 +どちらもデフォルトはNULLです。 + +この句は内部的にJSON_VALUEまたはJSON_QUERYと同じ意味になります。 +後者は、指定された型がスカラ型でない場合、またはFORMAT JSONWRAPPER、またはQUOTES句のいずれかが存在する場合です。 @@ -19495,30 +25450,46 @@ where json_table_column is: + +指定されたtypeに強制変換した後、ビューの出力行にpath_expressionを適用して得られたブール値を挿入します。 + +この値は、PATH式を行パターンに適用した結果、値が生成されるかどうかに対応します。 + +指定されたtypeboolean型からのキャストを持つべきです。 + +オプションでON ERRORを使用して、JSONパス評価中にエラーが発生した場合、またはSQL/JSON値を指定された型に強制変換した場合に、エラーを発生するか、指定された値を返すかを指定できます。 +デフォルトは、ブール値FALSEを返します。 + +この句は内部的にはJSON_EXISTSと同じ意味に変換されます。 @@ -19532,21 +25503,30 @@ where json_table_column is: + +行パターンのネストされたレベルからSQL/JSON値を抽出し、COLUMNS副句で定義された1つ以上の列を生成し、それらの列に抽出されたSQL/JSON値を挿入します。 +COLUMNS副句のjson_table_column式は、親のCOLUMNS句と同じ構文を使用します。 + +NESTED PATH構文は再帰的です。 +したがって、複数のNESTED PATH副構文を互いに指定することで、複数のネストされたレベルを下に移動できます。 +これにより、SQL文内で複数のJSON_TABLE式を連鎖させるのではなく、単一の関数呼び出しでJSONオブジェクトと配列の階層をネスト解除できます。 @@ -19554,10 +25534,14 @@ where json_table_column is: + +上記のjson_table_columnの各種類において、PATH句が省略された場合、パス式$.nameが使用されます。 +ここで、nameは指定された列名です。 @@ -19571,9 +25555,13 @@ where json_table_column is: + +オプションのjson_path_nameは、指定されたpath_expressionの識別子として機能します。 +名前は一意でなければならず、列名と区別する必要があります。 @@ -19585,6 +25573,7 @@ where json_table_column is: + +オプションのON ERRORは、最上位のpath_expressionを評価する際のエラー処理方法を指定するために使用できます。 +エラーを発生する場合はERRORを使用し、空のテーブル、つまり0行を含むテーブルを返す場合はEMPTYを使用します。 +この句は、列の評価時に発生するエラーには影響しないことに注意してください。 +この場合の動作は、ON ERROR句が指定された列に対して指定されているかどうかによって異なります。 @@ -19601,8 +25595,11 @@ where json_table_column is: Examples + +以下の例では、次のテーブルにJSONデータを含めます。 CREATE TABLE my_films ( js jsonb ); @@ -19628,11 +25625,14 @@ INSERT INTO my_films VALUES ( + +次の問い合わせは、JSON_TABLEを使用して、my_filmsテーブル内のJSONオブジェクトを、通常の列を伴って元のJSONに含まれるキーkindtitle、およびdirectorの列を含むビューに変換する方法を示しています。 SELECT jt.* FROM @@ -19656,10 +25656,13 @@ SELECT jt.* FROM + +上記の問い合わせを次のように変更すると、トップレベルのJSONパス式で指定されたフィルタでPASSING引数の使用方法と、個々の列に対するさまざまなオプションが表示されます。 SELECT jt.* FROM @@ -19683,10 +25686,13 @@ SELECT jt.* FROM + +以下は、タイトルとディレクターの列を生成するためにNESTED PATHを使用する上記の問い合わせの修正版で、親の列idとkindにどのように結合されるかを示しています。 SELECT jt.* FROM @@ -19712,8 +25718,11 @@ SELECT jt.* FROM + +次の問い合わせは、ルートパスにフィルタを指定しない場合と同じです。 SELECT jt.* FROM @@ -19741,6 +25750,7 @@ SELECT jt.* FROM + +次に異なるJSONオブジェクトを入力として使用する別の問い合わせを示します。 +これは、NESTEDパスである$.movies[*]$.books[*]との間のUNION”兄弟結合”(sibling join)を示しています。 +また、NESTEDレベルでのFOR ORDINALITY列(列movie_idbook_id、およびauthor_id)の使用を示しています。 SELECT * FROM JSON_TABLE ( @@ -19792,13 +25806,17 @@ COLUMNS (
+ + シーケンス操作関数 sequence + +本節ではシーケンスオブジェクトに対し演算を行う関数について説明します。 +シーケンスオブジェクトは、シーケンスジェネレータ、あるいは単にシーケンスとも呼ばれます。 +シーケンスオブジェクトは特殊な一行だけのテーブルで、で作成されます。 +シーケンスオブジェクトは一般的にテーブルの行に一意の識別子を生成するために使用されます。 +に列挙されているシーケンス関数は、シーケンスオブジェクトから連続したシーケンス値を取得するための、簡易でマルチユーザに対応した関数です。 + + シーケンス関数 + +関数 + +説明 @@ -19834,6 +25867,7 @@ COLUMNS ( bigint + +シーケンスを次の値に進めてその値を返します。 +これは原子的に行われます。複数のセッションがnextvalを同時に実行しても、各々のシーケンスは異なったシーケンス値を安全に返します。 +シーケンスオブジェクトがデフォルト値を伴って作成されると、後続のnextval呼び出しは1から始まる次の値を返します。 +それ以外の動作は適切なパラメータをコマンドで使うことによって得られます。 + +この関数はシーケンスオブジェクトのUSAGEあるいはUPDATE権限が必要です。 @@ -19859,6 +25901,7 @@ COLUMNS ( bigint + +シーケンスオブジェクトの現在の値をセットします。オプションでis_calledをセットします。 +2つのパラメータを持つ形式では、シーケンスのlast_valueフィールドを指定した値にセットし、is_calledフィールドをtrueに設定します。これは次のnextvalが値を返す前にシーケンスを増分することを意味します。 +currvalで報告される値も指定した値に設定されます。 +3つのパラメータを持つ形式では、is_calledtrueあるいはfalseに設定されます。 +trueは2つのパラメータを持つ形式と同じ効果を持ちます。 +falseに設定されていると、次のnextvalはまさに指定した値を返し、後続のnextvalがシーケンスの増加を開始します。 +更に、この場合はcurrvalが報告する値は変化しません。たとえば次ようになります。 + + +SELECT setval('myseq', 42); 次のnextvalは43を返す +SELECT setval('myseq', 42, true); 同上 +SELECT setval('myseq', 42, false); 次のnextvalは42を返す + + +setvalが返した値はその2番目の引数と単に同じです。 + +この関数はシーケンスのUPDATE権限が必要です。 @@ -19899,6 +25963,7 @@ SELECT setval('myseq', 42, false); Next nextvalbigint + +現在のセッションでこのシーケンスに対して直近のnextvalによって得られた値を返します。 +(このセッションでnextvalが呼ばれていなければエラーが報告されます。) +これはセッションローカルな値を返すので、他のセッションがnextvalを呼び出したかどうかに関わらず予測可能な値を返します。 + +この関数はシーケンスのUSAGEあるいはSELECT権限が必要です。 @@ -19922,6 +25994,7 @@ SELECT setval('myseq', 42, false); Next nextvalbigint + +現在のセッションでこのシーケンスに対して直近のnextvalによって得られた値を返します。 +この関数は、現在のセッションでnextvalが直近に適用されたシーケンス名を参照する引数を取ることを除き、currvalと同じです。 +このセッションでnextvalが呼ばれていないのにlastvalを呼び出すのはエラーです。 + +この関数はシーケンスのUSAGEあるいはSELECT権限が必要です。 @@ -19942,6 +26022,7 @@ SELECT setval('myseq', 42, false); Next nextval + +同一のシーケンスから数値を取得する同時実行トランザクション同士のブロックを防止するため、nextvalで得られる値は、呼び出しているトランザクションが後でアボートした際に再利用目的での回収は行われません。 +これは、トランザクションのアボートあるいはデータベースのクラッシュによって、割り当てられるシーケンスの値に欠番ができることがある、ということを意味します。 +これはトランザクションのアボートがなくても起こります。 +例えばON CONFLICT句のあるINSERTでは、挿入される予定のタプルについて、必要となるすべてのnextvalの呼び出しも含めて計算し、その後でON CONFLICTのルールを代わりに使用することになる競合について検知します。 +従って、PostgreSQLのシーケンスオブジェクトは欠番のないシーケンスを得るために使うことはできません + +同様に、setvalが行ったシーケンス状態の変更は直ちに他のトランザクションから可視になり、トランザクションがロールバックしても元には戻りません。 + +nextvalsetvalの呼び出しを含むトランザクションがコミットする前にデータベースクラスタがクラッシュすると、そのシーケンスの状態は永続的な記憶装置に格納されないかもしれず、クラスタが再起動した後にそのシーケンスが元の状態のままなのか、更新された状態になっているのかは定かではありません。 +コミットされていないトランザクションは可視ではないので、これはデータベース内のシーケンスの利用に関して言えば無害です。 +しかし、シーケンス値をデータベースの外での永続的な利用を目的として使う場合は、nextvalの呼び出しが確実にコミットされてから利用してください。 + +シーケンス関数により操作されるシーケンスはregclass引数で指定されますが、それはpg_classシステムカタログ内にある、そのシーケンスの単なるOIDです。 +しかしながら、手作業でOIDを検索する必要はなく、regclassデータ型の入力変換器が代わってその作業を行ってくれます。 +詳細はを見てください。 + + 条件式 CASE @@ -19998,26 +26101,38 @@ SELECT setval('myseq', 42, false); Next nextval conditional expression + + 条件式 + + +本節ではPostgreSQLで使用可能なSQL準拠の条件式について説明します。 + +ここで説明する条件式より発展した機能を求める場合は、より表現の豊富なプログラム言語でストアドプロシージャを記述することで解決されます。 + +COALESCEGREATESTLEASTは構文的には関数に似ていますが通常の関数ではなく、明示的なVARIADIC配列引数と一緒には使えません。 @@ -20025,9 +26140,12 @@ SELECT setval('myseq', 42, false); Next nextvalCASE + +SQLCASE式は他のプログラミング言語のif/else構文に類似した汎用条件式です。 CASE WHEN condition THEN result @@ -20036,6 +26154,7 @@ CASE WHEN condition THEN result + +CASE句は式が有効な位置であればどこでも使用可能です。 +それぞれのconditionとはboolean型の結果を返す式です。 +もしconditionの結果が真であれば、CASE式の値は、conditionに続くresultとなります。そして、CASE式の残りは処理されません。 +もしconditionの結果が偽であれば後に続く全てのWHEN句が同じようにして調べられます。 +WHENconditionの1つも真でない場合、CASE式の値はELSE句のresultになります。 +ELSE句が省略され、どのconditionも真でない場合、結果はNULLです。 + +以下に例を示します。 SELECT * FROM test; @@ -20078,14 +26207,21 @@ SELECT a, + +全てのresult式のデータ型は単一の出力型に変換可能でなければなりません。 +詳細はを参照してください。 + +以下のように、上記の一般的な形式と異なるCASE式の単純な形式が存在します。 CASE expression @@ -20095,6 +26231,7 @@ CASE expression END + +最初のexpressionが計算され、そしてそれに等しいものが見つかるまでWHEN句のそれぞれのvalue式と比較されます。 +等しいものが見つからない場合、ELSE句のresult(もしくはNULL値)が返されます。 +これはC言語のswitch文に似ています。 + +上の例は簡略形CASE構文を使って次のように書くことができます。 SELECT a, CASE a WHEN 1 THEN 'one' @@ -20124,9 +26268,13 @@ SELECT a, + +CASE式は、結果を決定するために不必要などんな副式をも評価しません。 +例えば、以下は0除算エラーを防ぐための方法です。 SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; @@ -20134,6 +26282,7 @@ SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; + +で説明したとおり、式の副式が異なる時点で評価される様々な状況があります。そのためCASEは必要な副式のみを評価するという原則は厳格なものではありません。 +例えば、定数1/0副式は、実行時には決して入らないCASE節の中にあったとしても、通常は計画時にゼロによる除算での失敗という結果に終わります。 @@ -20165,30 +26317,46 @@ SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; + +COALESCE関数は、NULLでない自身の最初の引数を返します。 +全ての引数がNULLの場合にのみNULLが返されます。データを表示目的で取り出す際、NULL値をデフォルト値で置き換えるためによく使用されています。以下に例を示します。 SELECT COALESCE(description, short_description, '(none)') ... + +これはdescriptionがNULLでなければそれを返します。 +そうでない場合(NULLの場合)は、short_descriptionがNULLでなければそれを返します。 +それ以外の場合(short_descriptionもNULLの場合)は(none)が返ります。 + +引数はすべて共通の型に変換できる必要があり、それが結果の型になります。(詳細はを参照してください。) + +CASE式同様、COALESCEは結果を決定するために必要な引数のみを評価します。つまり、非NULL引数が見つかれば、その右側にある引数は評価されません。 +この標準SQL関数は、他のいくつかのデータベースで使用されているNVLおよびIFNULLと類似の機能を提供します。 @@ -20204,28 +26372,42 @@ SELECT COALESCE(description, short_description, '(none)') ... + +NULLIF関数は、value1value2と等しい場合、NULL値を返します。 +その他の場合はvalue1を返します。 +これを使って、上記のCOALESCEの例の逆演算を実行できます SELECT NULLIF(value, '(none)') ... + +この例では、value(none)ならばNULLが返ります。 +さもなくばvalueを返します + +2つの引数は比較可能な型でなければなりません。 +具体的には、あたかもvalue1 = value2と書いたように比較されるので、適当な=演算子が使用できなければなりません。 + +結果は最初の引数と同じ型ですが、微妙な場合があります。 +実際に返却されるのは=演算子が暗示する最初の引数で、場合によっては2番目の引数にマッチするように昇格されています。 +たとえばNULLIF(1, 2.2)numericを出力します。なぜならinteger = numeric演算子はなく、numeric = numericがあるだけだからです。 + + <literal>GREATEST</literal>および<literal>LEAST</literal> GREATEST @@ -20256,26 +26445,41 @@ SELECT NULLIF(value, '(none)') ... + +GREATESTLEAST関数は任意の数の式のリストから最大値もしくは最小値を選択します。 +評価される全ての式は共通の型に変換できる必要があり、それが結果の型になります(詳細はを参照してください)。 + +引数リストの中のNULL値は無視されます。 +全ての式がNULLと評価された場合に限って結果はNULLになります。 +(これは標準SQLからの逸脱です。 +標準によれば、結果値は、いずれかの引数がNULLの場合はNULLになります。 +他の一部のデータベースでは、このように動作します。) + + 配列関数と演算子 + +に、配列型専用に利用可能な演算子を示します。 +これらに加えてで示す通常の比較演算子が配列で利用できます。 +比較演算子は配列の内容をその要素のデータ型用のデフォルトのB-tree比較関数を要素単位で比較し、最初にどの要素に違いがあったかに基づいてソートします。 +多次元配列では配列の要素は行優先順にアクセスされます。(最後の添字が最初に変化します。) +2つの配列の内容が同じで次元数が異なる場合は、どの次元で最初に違いがあったかによってソート順が決まります。
+ + 配列演算子 + +演算子 + +説明 + +例 @@ -20314,11 +26536,15 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の配列が2番目を含んでいるか?すなわち、2番目の配列の各要素は最初の配列のいくつかの要素と同じであるか? +(重複は特に考慮されないので、ARRAY[1]ARRAY[1,1]はそれぞれがお互いに相手を含んでいると見なされます。) ARRAY[1,4,3] @> ARRAY[3,1,3] @@ -20332,7 +26558,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の配列は2番目に含まれているか? ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] @@ -20346,7 +26575,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +配列は重なり合っているか?すなわち、共通の要素を持っているか? ARRAY[1,4,3] && ARRAY[2,1] @@ -20360,12 +26592,18 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +2つの配列を結合します。 +nullあるいは空の配列の結合は無処理です。そうでない場合は、配列は同じ次元数を持っていなければなりません。 +(最初の例にあるように)。さもなければ次元数でひとつ違わなければなりません(2番目の例にあるように)。 +配列の要素型が異なる場合は、共通の型へと置き換えられます(参照)。 ARRAY[1,2,3] || ARRAY[4,5,6,7] @@ -20383,8 +26621,11 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +配列(空か一次元の配列でなければなりません)の先頭に要素を結合します。 3 || ARRAY[4,5,6] @@ -20398,8 +26639,11 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +配列(空か一次元の配列でなければなりません)の最後に要素を結合します。 ARRAY[4,5,6] || 7 @@ -20411,30 +26655,50 @@ SELECT NULLIF(value, '(none)') ...
+ +配列演算子の振舞いの詳細はを参照してください。 +どの演算子がインデックス付きの操作をサポートしているかのより詳細についてはを参照してください。 + +に配列型で使用可能な関数を示します。 +これらの関数の情報と例についてはを参照してください。 + + 配列関数 + +関数 + +説明 + +例 @@ -20449,9 +26713,12 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +配列の最後に要素を追加します。(anycompatiblearray || anycompatible演算子と同じです。) array_append(ARRAY[1,2], 3) @@ -20468,9 +26735,12 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +2つの配列を結合します。(anycompatiblearray || anycompatiblearray演算子と同じです。) array_cat(ARRAY[1,2,3], ARRAY[4,5]) @@ -20487,7 +26757,10 @@ SELECT NULLIF(value, '(none)') ... text + +配列の次元をテキスト表現で返します。 array_dims(ARRAY[[1,2,3], [4,5,6]]) @@ -20505,10 +26778,14 @@ SELECT NULLIF(value, '(none)') ... anyarray + +与えられた値のコピーで満たされた2番目の引数で指定した次元の長さを持つ配列を返します。 +オプションの3番目の引数は各次元の下限値を与えます(デフォルトはすべて1です)。 array_fill(11, ARRAY[2,3]) @@ -20529,8 +26806,12 @@ SELECT NULLIF(value, '(none)') ... integer + +要求された配列の次元の大きさを返します。 +(空、あるいは配列の次元が見つからない場合は0ではなくNULLを生成します。) array_length(array[1,2,3], 1) @@ -20555,7 +26836,10 @@ SELECT NULLIF(value, '(none)') ... integer + +要求された配列の次元の下限を返します。 array_lower('[0:2]={1,2,3}'::integer[], 1) @@ -20572,7 +26856,10 @@ SELECT NULLIF(value, '(none)') ... integer + +配列の次元数を返します。 array_ndims(ARRAY[[1,2,3], [4,5,6]]) @@ -20589,12 +26876,18 @@ SELECT NULLIF(value, '(none)') ... integer + +2番目の引数が最初に配列に現れた添字を返します。存在しなければNULLを返します。 +3番目の引数が与えられるとその添字から検索が始まります。 +配列は一次元でなければなりません。 +比較はIS NOT DISTINCT FROMの意味論で行われるので、NULLを検索することができます。 array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') @@ -20611,6 +26904,7 @@ SELECT NULLIF(value, '(none)') ... integer[] + +2番目の引数が最初の引数として与えられた配列に現れるすべての添字を配列で返します。 +配列は一次元でなければなりません。 +比較はIS NOT DISTINCT FROMの意味論で行われるので、NULLを検索することができます。 +配列がNULLのときのみNULLが返ります。 +値が配列中に見つからなければ空の配列が返ります。 array_positions(ARRAY['A','A','B','A'], 'A') @@ -20635,9 +26935,12 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +配列の先頭に要素を追加します。(anycompatible || anycompatiblearray演算子と同じです。) array_prepend(1, ARRAY[2,3]) @@ -20654,10 +26957,15 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +与えられた値と等しい要素を配列から削除します。 +配列は一次元でなければなりません。 +比較はIS NOT DISTINCT FROMの意味論で行われるので、NULLを削除することができます。 array_remove(ARRAY[1,2,3,2], 2) @@ -20674,8 +26982,11 @@ SELECT NULLIF(value, '(none)') ... anycompatiblearray + +2番目の引数と等しい要素を3番目の引数で置き換えます。 array_replace(ARRAY[1,2,5,4], 5, 3) @@ -20692,7 +27003,10 @@ SELECT NULLIF(value, '(none)') ... anyarray + +配列の最初の次元を逆にします。 array_reverse(ARRAY[[1,2],[3,4],[5,6]]) @@ -20709,11 +27023,16 @@ SELECT NULLIF(value, '(none)') ... anyarray + +arrayからランダムに選択されたn個のアイテムの配列を返します。 +narrayの最初の次元の長さを超えることはできません。 +arrayが多次元の場合、itemは指定された最初の添字を持つスライスです。 array_sample(ARRAY[1,2,3,4,5,6], 3) @@ -20734,7 +27053,10 @@ SELECT NULLIF(value, '(none)') ... anyarray + +配列の1次元目をランダムにシャッフルします。 array_shuffle(ARRAY[[1,2],[3,4],[5,6]]) @@ -20755,14 +27077,20 @@ SELECT NULLIF(value, '(none)') ... anyarray + +配列の最初の次元をソートします。 +ソート順序は、その配列の要素型のデフォルトソート順序によって決定されます。 +ただし、要素型が照合可能な場合は、array引数にCOLLATE句を追加することで、使用する照合順序を指定できます。 + +descendingがtrueの場合、ソートは降順になり、それ以外の場合は昇順になります。 +省略した場合、デフォルトは昇順になります。 +nulls_firstがtrueの場合は非NULL値の前にNULL値が表示され、それ以外の場合は非NULL値の後にNULL値が表示されます。 +省略した場合、nulls_firstdescendingと同じ値を持つとみなされます。 array_sort(ARRAY[[2,4],[2,1],[6,5]]) @@ -20787,6 +27120,7 @@ SELECT NULLIF(value, '(none)') ... text + +配列要素をテキスト表現に変換しdelimiter文字列で区切って結合します。 +NULLでないnull_stringが与えられると、NULL配列要素をその文字列で表現します。さもなければ無視されます。 +string_to_arrayも参照してください。 array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') @@ -20810,7 +27148,10 @@ SELECT NULLIF(value, '(none)') ... integer + +要求された配列の次元の上限を返します。 array_upper(ARRAY[1,8,3,7], 1) @@ -20827,8 +27168,11 @@ SELECT NULLIF(value, '(none)') ... integer + +配列中の要素数を返します。配列が空なら0が返ります。 cardinality(ARRAY[[1,2],[3,4]]) @@ -20845,8 +27189,12 @@ SELECT NULLIF(value, '(none)') ... anyarray + +最後のn要素を削除して配列を短縮します。 +配列が複数次元なら、最初の次元だけが短縮されます。 trim_array(ARRAY[1,2,3,4,5,6], 2) @@ -20863,8 +27211,12 @@ SELECT NULLIF(value, '(none)') ... setof anyelement + +配列を行の集合に展開します。 +配列要素は格納順に読み出されます。 unnest(ARRAY[1,2]) @@ -20892,10 +27244,15 @@ SELECT NULLIF(value, '(none)') ... setof anyelement, anyelement [, ... ] + +複数の配列(異なるデータ型の可能性があります)を行の集合に展開します。 +配列の長さが同じでなければ、短い配列にはNULLが詰められます。 +これは問い合わせのFROM句でのみ許されます。を参照してください。 select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b) @@ -20914,19 +27271,29 @@ SELECT NULLIF(value, '(none)') ...
+ +配列を使用する集約関数array_aggについて、も参照してください。
+ + 範囲/多重範囲関数と演算子 + +範囲型の概要についてはをご覧ください。 + +に、範囲型専用に利用可能な演算子を示します。 +に、多重範囲(multirange)型専用に利用可能な演算子を示します。 +これらに加えてで示す通常の比較演算子が範囲型と多重範囲型で利用できます。 +この比較演算子は最初に範囲の下限で順序付けし、それが等しい場合にのみ上限を比較します。 +多重範囲型の演算子は各範囲を、等しくならなくなるまで比較します。 +これは通常有用な全順序付けにはなりませんが、範囲に対して一意インデックスを構成することができる演算子が提供されます。 + + 範囲演算子 + +演算子 + +説明 + +例 @@ -20964,7 +27350,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の範囲は2番目を含んでいるか? int4range(2,4) @> int4range(2,3) @@ -20978,7 +27367,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲はその要素を含んでいるか? '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp @@ -20992,7 +27384,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の範囲は2番目に含まれるか? int4range(2,4) <@ int4range(1,7) @@ -21006,7 +27401,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +その要素は範囲に含まれるか? 42 <@ int4range(1,7) @@ -21020,7 +27418,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は重なり合っているか?すなわち共通の要素があるか? int8range(3,7) && int8range(4,12) @@ -21034,7 +27435,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の範囲は厳密に2番目の左か? int8range(1,10) << int8range(100,110) @@ -21048,7 +27452,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の範囲は厳密に2番目の右か? int8range(50,60) >> int8range(20,30) @@ -21062,7 +27469,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の範囲は2番目の右を被覆していないか? int8range(1,20) &< int8range(18,20) @@ -21076,7 +27486,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の範囲は2番目の左を被覆していないか? int8range(7,20) &> int8range(5,10) @@ -21090,7 +27503,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は隣接しているか? numrange(1.1,2.2) -|- numrange(2.2,3.3) @@ -21104,9 +27520,12 @@ SELECT NULLIF(value, '(none)') ... anyrange + +範囲の和を計算します。範囲は和の結果が単一の範囲になるように、重なり合っているか、隣接していなければなりません。(ただしrange_merge()を参照してください。) numrange(5,15) + numrange(10,20) @@ -21120,7 +27539,10 @@ SELECT NULLIF(value, '(none)') ... anyrange + +範囲の共通部分を計算します。 int8range(5,15) * int8range(10,20) @@ -21134,9 +27556,13 @@ SELECT NULLIF(value, '(none)') ... anyrange + +範囲の差を計算します。 +差が単一の範囲にならないように、2番目の範囲は最初の範囲に含まれていてはいけません。 int8range(5,15) - int8range(10,20) @@ -21148,18 +27574,30 @@ SELECT NULLIF(value, '(none)') ...
+ + 多重範囲演算子 + +演算子 + +説明 + +例 @@ -21171,7 +27609,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の多重範囲は2番目を含んでいるか? '{[2,4)}'::int4multirange @> '{[2,3)}'::int4multirange @@ -21185,7 +27626,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は範囲を含んでいるか? '{[2,4)}'::int4multirange @> int4range(2,3) @@ -21199,7 +27643,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は要素を含んでいるか? '{[2011-01-01,2011-03-01)}'::tsmultirange @> '2011-01-10'::timestamp @@ -21213,7 +27660,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は多重範囲を含んでいるか? '[2,4)'::int4range @> '{[2,3)}'::int4multirange @@ -21227,7 +27677,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の多重範囲は2番目に含まれているか? '{[2,4)}'::int4multirange <@ '{[1,7)}'::int4multirange @@ -21241,7 +27694,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は範囲に含まれているか? '{[2,4)}'::int4multirange <@ int4range(1,7) @@ -21255,7 +27711,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は多重範囲に含まれているか? int4range(2,4) <@ '{[1,7)}'::int4multirange @@ -21269,7 +27728,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +要素は多重範囲に含まれているか? 4 <@ '{[1,7)}'::int4multirange @@ -21283,7 +27745,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は重なっているか?すなわち、共通に持つ要素があるか? '{[3,7)}'::int8multirange && '{[4,12)}'::int8multirange @@ -21297,7 +27762,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は範囲と重なり合うか? '{[3,7)}'::int8multirange && int8range(4,12) @@ -21311,7 +27779,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は多重範囲と重なり合うか? int8range(3,7) && '{[4,12)}'::int8multirange @@ -21325,7 +27796,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の多重範囲は厳密に2番目の左か? '{[1,10)}'::int8multirange << '{[100,110)}'::int8multirange @@ -21339,7 +27813,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は厳密に範囲の左か? '{[1,10)}'::int8multirange << int8range(100,110) @@ -21353,7 +27830,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は厳密に多重範囲の左か? int8range(1,10) << '{[100,110)}'::int8multirange @@ -21367,7 +27847,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の多重範囲は厳密に2番目の右か? '{[50,60)}'::int8multirange >> '{[20,30)}'::int8multirange @@ -21381,7 +27864,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は厳密に範囲の右か? '{[50,60)}'::int8multirange >> int8range(20,30) @@ -21395,7 +27881,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は厳密に多重範囲の右か? int8range(50,60) >> '{[20,30)}'::int8multirange @@ -21409,7 +27898,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の多重範囲は2番目の右を被覆していないか? '{[1,20)}'::int8multirange &< '{[18,20)}'::int8multirange @@ -21423,7 +27915,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は範囲の右を被覆していないか? '{[1,20)}'::int8multirange &< int8range(18,20) @@ -21437,7 +27932,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は多重範囲の右を被覆していないか? int8range(1,20) &< '{[18,20)}'::int8multirange @@ -21451,7 +27949,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +最初の多重範囲は2番目の左を被覆していないか? '{[7,20)}'::int8multirange &> '{[5,10)}'::int8multirange @@ -21465,7 +27966,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は範囲の左を被覆していないか? '{[7,20)}'::int8multirange &> int8range(5,10) @@ -21479,7 +27983,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は多重範囲の左を被覆していないか? int8range(7,20) &> '{[5,10)}'::int8multirange @@ -21493,7 +28000,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +それらの多重範囲は隣接しているか? '{[1.1,2.2)}'::nummultirange -|- '{[2.2,3.3)}'::nummultirange @@ -21507,7 +28017,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は範囲に連接しているか? '{[1.1,2.2)}'::nummultirange -|- numrange(2.2,3.3) @@ -21521,7 +28034,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は多重範囲に連接しているか? numrange(1.1,2.2) -|- '{[2.2,3.3)}'::nummultirange @@ -21535,8 +28051,12 @@ SELECT NULLIF(value, '(none)') ... anymultirange + +多重範囲の和を計算します。 +多重範囲は重なり合っている必要も、隣接している必要もありません。 '{[5,10)}'::nummultirange + '{[15,20)}'::nummultirange @@ -21550,7 +28070,10 @@ SELECT NULLIF(value, '(none)') ... anymultirange + +多重範囲の間の共通部分を計算します。 '{[5,15)}'::int8multirange * '{[10,20)}'::int8multirange @@ -21564,7 +28087,10 @@ SELECT NULLIF(value, '(none)') ... anymultirange + +多重範囲の間の差を計算します。 '{[5,20)}'::int8multirange - '{[10,15)}'::int8multirange @@ -21576,20 +28102,32 @@ SELECT NULLIF(value, '(none)') ...
+ +空の範囲あるいは多重範囲が含まれる場合、「左」「右」「隣接」演算子は常に偽を返します。つまり、空の範囲は他の範囲の前でも後ろでもないと見なされます。 + +他の場所では、空の範囲と多重範囲は加法単位元として扱われます。 +空の値との和は自分自身です。 +空の値を引いたものは自分自身です。 +空の多重範囲は空の範囲と正確に同じ特徴を持ちます。 +すべての範囲は空の範囲を含みます。 +すべての多重範囲はいくらでも空の範囲を含むことができます。 + +範囲の和と差演算子は、結果の範囲に2つの隣接しない副範囲が含まれる場合には失敗します。 +そのような範囲は表現できないからです。 +多重範囲引数を取り、多重範囲を返す別の和と差の演算子があり、引数が隣接していなくても失敗しません。 +隣接しないかもしれない範囲の和あるいは差の演算が必要なら、まず範囲を多重範囲にキャストすることによってエラーを避けることができます。 + +に範囲型で利用可能な関数を示します。 +に多重範囲型で利用可能な関数を示します。 + + 範囲関数 + +関数 + +説明 + +例 @@ -21633,8 +28192,11 @@ SELECT NULLIF(value, '(none)') ... anyelement + +範囲の下限を取り出します。(範囲が空か下限がない場合NULLとなります。) lower(numrange(1.1,2.2)) @@ -21651,8 +28213,11 @@ SELECT NULLIF(value, '(none)') ... anyelement + +範囲の上限を取り出します。(範囲が空か上限がない場合はNULLとなります。) upper(numrange(1.1,2.2)) @@ -21669,7 +28234,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲は空か? isempty(numrange(1.1,2.2)) @@ -21686,7 +28254,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲の下限は境界を含むか? lower_inc(numrange(1.1,2.2)) @@ -21703,7 +28274,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲の上限は境界を含むか? upper_inc(numrange(1.1,2.2)) @@ -21720,8 +28294,11 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲に下限があるか? (-Infinityの下限は偽を返します。) lower_inf('(,)'::daterange) @@ -21738,8 +28315,11 @@ SELECT NULLIF(value, '(none)') ... boolean + +範囲に上限はあるか? (Infinityの上限は偽を返します。) upper_inf('(,)'::daterange) @@ -21756,7 +28336,10 @@ SELECT NULLIF(value, '(none)') ... anyrange + +与えられた両方の範囲を含む最小の範囲を計算します。 range_merge('[1,2)'::int4range, '[3,4)'::int4range) @@ -21768,18 +28351,30 @@ SELECT NULLIF(value, '(none)') ...
+ + 多重範囲関数 + +関数 + +説明 + +例 @@ -21793,8 +28388,11 @@ SELECT NULLIF(value, '(none)') ... anyelement + +多重範囲の下限を取り出します(多重範囲が空か下限がない場合はNULLとなります)。 lower('{[1.1,2.2)}'::nummultirange) @@ -21811,8 +28409,11 @@ SELECT NULLIF(value, '(none)') ... anyelement + +多重範囲の上限を取り出します。(多重範囲が空か上限がない場合はNULLとなります。) upper('{[1.1,2.2)}'::nummultirange) @@ -21829,7 +28430,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は空か? isempty('{[1.1,2.2)}'::nummultirange) @@ -21846,7 +28450,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲の下限は境界を含むか? lower_inc('{[1.1,2.2)}'::nummultirange) @@ -21863,7 +28470,10 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲の上限は境界を含むか? upper_inc('{[1.1,2.2)}'::nummultirange) @@ -21880,8 +28490,11 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は下限があるか? (-Infinityの下限は偽を返します。) lower_inf('{(,)}'::datemultirange) @@ -21898,8 +28511,11 @@ SELECT NULLIF(value, '(none)') ... boolean + +多重範囲は上限があるか? (Infinityの上限は偽を返します。) upper_inf('{(,)}'::datemultirange) @@ -21916,7 +28532,10 @@ SELECT NULLIF(value, '(none)') ... anyrange + +与えられた多重範囲全体を含む最小の範囲を計算します。 range_merge('{[1,2), [3,4)}'::int4multirange) @@ -21933,7 +28552,10 @@ SELECT NULLIF(value, '(none)') ... anymultirange + +ちょうど与えられた範囲を含む多重範囲を返す。 multirange('[1,2)'::int4range) @@ -21951,7 +28573,10 @@ SELECT NULLIF(value, '(none)') ... setof anyrange + +複数範囲を昇順の集合に展開します。 unnest('{[1,2), [3,4)}'::int4multirange) @@ -21967,21 +28592,32 @@ SELECT NULLIF(value, '(none)') ...
+ +lower_incupper_inclower_infupper_infはすべて空の多重範囲に対して偽を返します。
+ + 集約関数 aggregate function built-in + + 集約関数 + 組み込み + + +集約関数は入力値の集合から単一の結果を計算します。 +に組み込みの汎用的な集約関数を、に統計集約関数を示します。 +には組み込みのグループ内順序集合集約関数を、一方には組み込みのグループ内仮想集合用の順序集約関数を示します。 +には、集約関数と密接に関係するグループ化演算を示します。 +集約関数の特殊な構文に関する考察はで説明されています。 +また、初歩的な情報についてはを参照して下さい。 + +部分モードをサポートする集約関数は並列集約など、様々な最適化に有用です。 + +以下のすべての集約は、オプションのORDER BY句を受け付けます(で概説)。この句は出力が順序に影響される集約にのみ追加されました。 + + 汎用集約関数 + +関数 + +説明 + + 部分モード @@ -22039,9 +28700,15 @@ SELECT NULLIF(value, '(none)') ... same as input type + +NULL以外の入力値から任意の値を返します。 + + @@ -22053,9 +28720,15 @@ SELECT NULLIF(value, '(none)') ... anyarray + +NULLも含めてすべての入力値を収集して配列に格納します。 + + @@ -22064,11 +28737,18 @@ SELECT NULLIF(value, '(none)') ... anyarray + +すべての入力配列を結合して次元が1高い配列に格納します。 +(入力配列はすべて同じ次元数を持ち、空もしくはNULLであってはいけません。) + + @@ -22107,10 +28787,16 @@ SELECT NULLIF(value, '(none)') ... interval + +すべての非NULL入力値の平均(算術平均)を計算します。 + + @@ -22134,9 +28820,15 @@ SELECT NULLIF(value, '(none)') ... bit + +全ての非NULLの入力値のビット積を計算します。 + + @@ -22160,9 +28852,15 @@ SELECT NULLIF(value, '(none)') ... bit + +全ての非NULLの入力値のビット和を計算します。 + + @@ -22186,10 +28884,17 @@ SELECT NULLIF(value, '(none)') ... bit + +すべての非NULL入力値のビット毎の排他的論理和を計算します。 +順序付けられない値の集合のチェックサムとして有用かもしれません。 + + @@ -22201,9 +28906,15 @@ SELECT NULLIF(value, '(none)') ... boolean + +全ての入力が真ならば真、そうでなければ偽を返します。 + + @@ -22215,9 +28926,15 @@ SELECT NULLIF(value, '(none)') ... boolean + +入力のどれかが真ならば真、そうでなければ偽を返します。 + + @@ -22229,9 +28946,15 @@ SELECT NULLIF(value, '(none)') ... bigint + +入力行数を返します。 + + @@ -22240,10 +28963,16 @@ SELECT NULLIF(value, '(none)') ... bigint + +非NULLの入力行数を返します。 + + @@ -22255,9 +28984,15 @@ SELECT NULLIF(value, '(none)') ... boolean + +これは標準SQLのbool_andと等価です。 + + @@ -22276,11 +29011,18 @@ SELECT NULLIF(value, '(none)') ... jsonb + +NULLも含めてすべての入力値を収集し、JSON配列に格納します。 +入力はto_jsonあるいはto_jsonbでJSONに変換されます。 + + @@ -22299,11 +29041,18 @@ SELECT NULLIF(value, '(none)') ... jsonb + +NULLをスキップして、すべての入力値をJSON配列に収集します。 +値はto_JSONまたはto_JSONに従ってjsonbに変換されます。 + + @@ -22316,6 +29065,7 @@ SELECT NULLIF(value, '(none)') ... RETURNING data_type FORMAT JSON ENCODING UTF8 ) + +json_arrayと同じように動作しますが、集約関数として動作するため、1つのvalue_expressionパラメータのみを使用します。 +ABSENT ON NULLが指定されている場合、NULL値は無視されます。 +ORDER BYが指定されている場合、要素は入力順ではなく、配列の順に表示されます。 SELECT json_arrayagg(v) FROM (VALUES(2),(1)) t(v) [2, 1] + + @@ -22341,16 +29098,22 @@ SELECT NULLIF(value, '(none)') ... RETURNING data_type FORMAT JSON ENCODING UTF8 ) - Behaves like json_object, but as an + +json_objectのように動作しますが、集約関数として動作するため、1つのkey_expressionと1つのvalue_expression引数のみを使用します。 SELECT json_objectagg(k:v) FROM (VALUES ('a'::text,current_date),('b',current_date + 1)) AS t(k,v) { "a" : "2022-05-10", "b" : "2022-05-11" } + + @@ -22375,12 +29138,20 @@ SELECT NULLIF(value, '(none)') ... jsonb + +すべてのキー/値ペアをJSONオブジェクトに格納します。 +キー引数はテキストに変換されます。値引数はto_jsonあるいはto_jsonbにしたがって変換されます。 +値はNULLでも構いませんが、キーはNULLにはできません。 + + @@ -22403,13 +29174,22 @@ SELECT NULLIF(value, '(none)') ... jsonb + +すべてのキー/値ペアをJSONオブジェクトに格納します。 +キー引数はテキストに変換されます。値はto_jsonあるいはto_jsonbにしたがって変換されます。 +keyはNULLにはできません。 +valueがNULLなら、そのエントリはスキップされます。 + + @@ -22432,13 +29212,22 @@ SELECT NULLIF(value, '(none)') ... jsonb + +すべてのキー/値ペアをJSONオブジェクトに格納します。 +キー引数はテキストに変換されます。値はto_jsonあるいはto_jsonbにしたがって変換されます。 +値はNULLでも構いませんが、キーはNULLにはできません。 +重複キーがある場合、エラーが発生します。 + + @@ -22461,14 +29250,24 @@ SELECT NULLIF(value, '(none)') ... jsonb + +すべてのキー/値ペアをJSONオブジェクトに格納します。 +キー引数はテキストに変換されます。値はto_jsonあるいはto_jsonbにしたがって変換されます。 +keyはNULLにはできません。 +valueがNULLなら、そのエントリはスキップされます。 +重複キーがある場合、エラーが発生します。 + + + @@ -22480,14 +29279,21 @@ SELECT NULLIF(value, '(none)') ... same as input type + +非NULL入力値の最大を計算します。 +数値、文字列、日時、列挙型およびbyteainetintervalmoneyoidpg_lsntidxid8、およびこれらすべての配列でも同様に利用できます。 + + @@ -22499,14 +29305,21 @@ SELECT NULLIF(value, '(none)') ... same as input type + +非NULL入力値の最小を計算します。 +数値、文字列、日時、列挙型およびbyteainetintervalmoneyoidpg_lsntidxid8、およびこれらすべての配列でも同様に利用できます。 + + @@ -22524,9 +29337,15 @@ SELECT NULLIF(value, '(none)') ... anymultirange + +非NULL入力の和を計算します。 + + @@ -22544,9 +29363,15 @@ SELECT NULLIF(value, '(none)') ... anymultirange + +非NULL入力の共通部分を計算します。 + + @@ -22565,11 +29390,18 @@ SELECT NULLIF(value, '(none)') ... bytea + +非NULL入力を結合して文字列に格納します。 +最初の値以降、各値の前にdelimiterで指定した値が(NULLでなければ)追加されます。 + + @@ -22609,9 +29441,15 @@ SELECT NULLIF(value, '(none)') ... money + +非NULL入力値の合計を計算します。 + + @@ -22623,16 +29461,23 @@ SELECT NULLIF(value, '(none)') ... xml + +非NULLのXML入力値を結合します。(参照。) + +
+ +上記の関数は、count関数を除き、1行も選択されなかった場合NULL値を返すことに注意してください。 +特に、行の選択がないsum関数は、予想されるであろうゼロではなくNULLを返し、そしてarray_aggは、入力行が存在しない場合に、空配列ではなくNULLを返します。 +必要であれば、NULLをゼロまたは空配列と置換する目的でcoalesce関数を使うことができます。 + +集約関数array_aggjson_aggjsonb_aggjson_agg_strictjsonb_agg_strictjson_object_aggjsonb_object_aggjson_object_agg_strictjsonb_object_agg_strictjson_object_agg_uniquejsonb_object_agg_uniquejson_object_agg_unique_strictjsonb_object_agg_unique_strictstring_agg、およびxmlagg、そして類似のユーザ定義の集約関数は、入力値の順序に依存した意味のある別の結果値を生成します。 +この並び順はデフォルトでは指定されませんが、に記述されているように、集計呼び出し中にORDER BY句を書くことで制御可能となります。別の方法として、並べ替えられた副問い合わせから入力値を供給することでも上手くいきます。 +例をあげます。 + +外側の問い合わせのレベルで結合などの追加処理がある場合、この方法は失敗するかもしれないことに注意して下さい。 +なぜなら、集約の計算の前に副問い合わせの出力を並べ替える必要があるかも知れないからです。 @@ -22678,6 +29536,7 @@ SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab; SOME + +bool_andbool_or論理集約関数は標準SQLの集約関数everyanyまたはsomeに対応します。 +PostgreSQLeveryをサポートしますが、any、あるいはsomeはサポートしません。 +anysomeの標準の構文には曖昧さがあるからです。 SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...; + +ここで、副問い合わせが論理値での1行を返す場合、ANYは副問い合わせを導入するもの、もしくは集約関数であるものいずれかとみなすことができます。 +従って、これらの集約関数に標準の名前を付けることはできません。 + +他のSQLデータベース管理システムでの作業に親しんだユーザは、count集約関数がテーブル全体に適用される場合の性能に失望するかも知れません。 +次のような問い合わせ: SELECT count(*) FROM sometable; + +はテーブルサイズに比例した労力が必要です。 +PostgreSQLはテーブル全体か、そのテーブルの全ての行を含んだインデックス全体のスキャンを必要とします。 + +統計解析処理によく使用される集約関数をに示します。 +(これらは、より一般的に使用される集約関数との混乱を防ぐために別出ししました。) +numeric_typeを受け付けると表示されている関数は、smallintintegerbigintnumericrealdouble precisionのすべての型で利用可能です。 +説明の部分におけるNは、すべての入力式が非NULLの入力行の個数を表します。 +すべての場合にて、例えばNが0の時など計算が無意味である場合にはNULLが返されます。 @@ -22736,19 +29618,31 @@ SELECT count(*) FROM sometable; + + 統計処理用の集約関数 + +関数 + +説明 + + 部分モード @@ -22758,6 +29652,9 @@ SELECT count(*) FROM sometable; correlation + + 相関 + corr @@ -22765,9 +29662,15 @@ SELECT count(*) FROM sometable; double precision + +相関係数を計算します。 + + @@ -22776,6 +29679,10 @@ SELECT count(*) FROM sometable; covariance population + + 共分散 + 母集団 + covar_pop @@ -22783,9 +29690,15 @@ SELECT count(*) FROM sometable; double precision + +母共分散を計算します。 + + @@ -22794,6 +29707,10 @@ SELECT count(*) FROM sometable; covariance sample + + 共分散 + 標本 + covar_samp @@ -22801,9 +29718,15 @@ SELECT count(*) FROM sometable; double precision + +標本の共分散を計算します。 + + @@ -22815,10 +29738,17 @@ SELECT count(*) FROM sometable; double precision + +独立変数の平均値を計算します。 + sum(X)/N. + + @@ -22830,10 +29760,17 @@ SELECT count(*) FROM sometable; double precision + +従属変数の平均値を計算します。 + sum(Y)/N. + + @@ -22845,9 +29782,15 @@ SELECT count(*) FROM sometable; bigint + +両方の入力が非NULLとなる行数を計算します。 + + @@ -22855,6 +29798,9 @@ SELECT count(*) FROM sometable; regression intercept + + 回帰切片 + regr_intercept @@ -22862,11 +29808,17 @@ SELECT count(*) FROM sometable; double precision + +(X, Y)の組み合わせで決まる、最小二乗法による線形方程式のY切片を計算します。 + + @@ -22878,9 +29830,15 @@ SELECT count(*) FROM sometable; double precision + +相関係数の二乗を計算します。 + + @@ -22888,6 +29846,9 @@ SELECT count(*) FROM sometable; regression slope + + 回帰勾配 + regr_slope @@ -22895,11 +29856,17 @@ SELECT count(*) FROM sometable; double precision + +(X, Y)の組み合わせで決まる、最小二乗法による線型方程式の勾配を計算します。 + + @@ -22911,11 +29878,17 @@ SELECT count(*) FROM sometable; double precision + +独立変数の二乗和sum(X^2) - sum(X)^2/Nを計算します。 + + @@ -22927,11 +29900,17 @@ SELECT count(*) FROM sometable; double precision + +独立変数と従属変数の積の和sum(X*Y) - sum(X) * sum(Y)/Nを計算します。 + + @@ -22943,11 +29922,17 @@ SELECT count(*) FROM sometable; double precision + +従属変数の積の和sum(Y^2) - sum(Y)^2/Nを計算します。 + + @@ -22955,18 +29940,30 @@ SELECT count(*) FROM sometable; standard deviation + + 標準偏差 + stddev stddev ( numeric_type ) + + 引数がdouble precisionあるいはrealに対してはdouble precision、それ以外はnumeric + +これはstddev_sampの歴史的な別名です。 + + @@ -22975,18 +29972,31 @@ SELECT count(*) FROM sometable; standard deviation population + + 標準偏差 + 母集団 + stddev_pop stddev_pop ( numeric_type ) + + 引数がdouble precisionあるいはrealに対してはdouble precision、それ以外はnumeric + +入力値の母標準偏差を計算します。 + + @@ -22995,18 +30005,31 @@ SELECT count(*) FROM sometable; standard deviation sample + + 標準偏差 + 標本 + stddev_samp stddev_samp ( numeric_type ) + + 引数がdouble precisionあるいはrealに対してはdouble precision、それ以外はnumeric + +入力値の標本標準偏差を計算します。 + + @@ -23015,14 +30038,23 @@ SELECT count(*) FROM sometable; variance variance ( numeric_type ) + + 引数がdouble precisionあるいはrealに対してはdouble precision、それ以外はnumeric + +これはvar_sampの歴史的な別名です。 + + @@ -23031,19 +30063,32 @@ SELECT count(*) FROM sometable; variance population + + 分散 + 母集団 + var_pop var_pop ( numeric_type ) + + 引数がdouble precisionあるいはrealに対してはdouble precision、それ以外はnumeric + +入力値の母分散(母標準偏差の二乗)を計算します。 + + @@ -23052,25 +30097,39 @@ SELECT count(*) FROM sometable; variance sample + + 分散 + 標本 + var_samp var_samp ( numeric_type ) + + 引数がdouble precisionあるいはrealに対してはdouble precision、それ以外はnumeric + +入力値の標本分散(標本標準偏差の二乗)を計算します。 + +
+ +順序集合集約構文を使う集約関数を示します。 +これらの関数は逆分散関数として参照されることがあります。 +これらの集約入力はORDER BYで導入され、集約ではないdirect argumentを取ることもでき、一度だけ計算されます。 +これらの関数は集約入力のNULL値を無視します。 +fractionパラメータを取る関数では、その値は0と1の間でなければなりません。そうでなければエラーが生じます。 +ただしNULLのfraction値は単にNULLの結果をもたらします。 ordered-set aggregate built-in + + 順序集合集約 + 組み込み + inverse distribution + + 逆分散 + + + 順序集合集約関数 + +関数 + +説明 + + 部分モード @@ -23116,16 +30201,27 @@ SELECT count(*) FROM sometable; modestatistical + + 最頻値(モード) + 統計 + mode () WITHIN GROUP ( ORDER BYanyelement ) anyelement + +集約引数の最頻値、最も頻出する値(複数の同じ度数の結果があれば、任意に選んだ最初のもの)を計算します。 +集約引数はソート可能な型でなければなりません。 + + @@ -23134,6 +30230,10 @@ SELECT count(*) FROM sometable; percentile continuous + + 百分位数 + 連続 + percentile_cont ( fraction double precision ) WITHIN GROUP ( ORDER BY double precision ) double precision @@ -23142,12 +30242,19 @@ SELECT count(*) FROM sometable; interval + +連続百分位数、引数の値の順序付け集合中で指定されたfractionに対応する値を計算します。 +これは必要なら隣り合う入力項目を補間します。 + + @@ -23160,12 +30267,19 @@ SELECT count(*) FROM sometable; interval[] + +複数の連続百分位数を計算します。 +結果はfractionsパラメータと同じ次元数の配列です。各非NULL要素は(必要なら隣り合う入力項目を補間して)その百分位数に対応する値で置き換えられます。 + + @@ -23174,17 +30288,28 @@ SELECT count(*) FROM sometable; percentile discrete + + 百分位数 + 離散 + percentile_disc ( fraction double precision ) WITHIN GROUP ( ORDER BY anyelement ) anyelement + +離散百分位数を計算します。集約引数の順序付け集合中で、その位置が指定したfractionと等しいか越えた最初の値です。 +集約引数はソート可能な型でなければなりません。 + + @@ -23193,13 +30318,21 @@ SELECT count(*) FROM sometable; anyarray + +複数の離散百分位数を計算します。 +結果はfractionsパラメータと同じ次元数の配列です。各非NULL要素はその百分位数に対応する値で置き換えられます。 +集約引数はソート可能な型でなければなりません。 + + @@ -23209,8 +30342,13 @@ SELECT count(*) FROM sometable; hypothetical-set aggregatebuilt-in + + 仮想集合集約 + 組み込み + + +に列挙されている仮想集合集約は、それぞれで定義されている同じ名前のウィンドウ関数と関連します。 +どの場合も、集約結果は、argsから構築される仮想的な行に対して、関連するウィンドウ関数が返す値で、そのような行がsorted_argsから計算されるソートされた行のグループに追加される場合を想定します。 +これらの関数に対してargsで与えられる直接引数のリストは、sorted_argsで与えられる集約された引数の数と型に一致しなければなりません。 +ほとんどの組み込み集約とは異なり、この集約はSTRICTではありません、すなわち、NULLを含む入力行を落としません。 +NULL値はORDER BY節で指定されるルールに従って並べられます。
+ + 仮想集合集約関数 + +関数 + +説明 + + 部分モード @@ -23251,14 +30407,24 @@ SELECT count(*) FROM sometable; rankhypothetical + + rank + 仮想の + rank ( args ) WITHIN GROUP ( ORDER BYsorted_args ) bigint + +重複する行のギャップを含む仮想の行の順位を計算します。すなわち、ピアグループの先頭の行の番号です。 + + @@ -23267,14 +30433,24 @@ SELECT count(*) FROM sometable; dense_rank hypothetical + + dense_rank + 仮想の + dense_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) bigint + +重複する行のギャップなしの仮想の行の順位を計算します。この関数は実効的にピアグループを数えます。 + + @@ -23283,15 +30459,26 @@ SELECT count(*) FROM sometable; percent_rank hypothetical + + percent_rank + 仮想の + percent_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) double precision + +仮想行の相対的な順位を計算します。すなわち、(rank - 1) / (total rows - 1)です。 +ですから値の範囲は境界を含んで0から1までです。 + + @@ -23300,30 +30487,50 @@ SELECT count(*) FROM sometable; cume_dist hypothetical + + cume_dist + 仮想の + cume_dist ( args ) WITHIN GROUP ( ORDER BY sorted_args ) double precision + +現在行の相対順位を計算します。すなわち、(仮想行より先行する、あるいはピアの行数) / (合計行数)です。 +ですから範囲は1/Nから1です。 + +
+ + グループ化演算 + +関数 + +説明 @@ -23338,12 +30545,17 @@ SELECT count(*) FROM sometable; integer + +どのGROUP BY式が現在のグループ化セットに含まれないかを示す整数のビットマスクを返します。 +最も右側の引数が最下位ビットになるようにビットが割り当てられます。 +各ビットは対応する式が結果の行を生成するグループ化セットのグループ化条件に含まれていれば0、そうでなければ1です。 @@ -23351,6 +30563,7 @@ SELECT count(*) FROM sometable;
+ +で示すグループ化演算はグループ化セット(参照)と一緒に使われ、結果の行を区別するものです。 +GROUPING関数の引数は実際には評価されませんが、関連する問い合わせのGROUP BY句にある式と正確に一致する必要があります。 +例えば以下のようになります。 => SELECT * FROM items_sold; make | model | sales @@ -23380,6 +30597,7 @@ SELECT count(*) FROM sometable; | | 3 | 50 (7 rows) + +ここで、最初の4行のグループ化0はこれらがグループ化列に対して正常にグループ化されたことを示します。 +値1modelが最後とその一つ前の行ではグループ化されなかったことを、値3makemodelも最後の行でグループ化されなかったことを意味します(ですから最後の行はすべての入力行に対する集約になっています)。
+ + ウィンドウ関数 window function built-in + + ウィンドウ関数 + 組み込み + + +ウィンドウ関数は現在の問い合わせ行に関連した行集合に渡っての計算処理機能を提供します。 +この機能の手引きはを、文法の詳細はを参照してください。 + +組み込みウィンドウ関数はに一覧されています。 +これらの関数は必ずウィンドウ関数構文で呼び出されなければなりません。つまり、OVER句が必要です。 + +これらの関数に加え、すべての組み込み、またはユーザ定義の汎用集約関数または統計集約関数もウィンドウ関数として使用できます(ただし順序集合や仮想集合集約はそうではありません)。組み込み集約関数一覧はを参照してください。 +集約関数は、呼び出しの後にOVER句が続いた場合のみウィンドウ関数として動作します。それ以外の場合は、非ウィンドウの集約関数として動作し、集合全体に対して1行だけを返します。 + + 汎用ウィンドウ関数 + +関数 + +説明 @@ -23449,8 +30698,11 @@ SELECT count(*) FROM sometable; bigint + +1から数える現在行のパーティション内での行番号を返します。 @@ -23463,9 +30715,12 @@ SELECT count(*) FROM sometable; bigint + +ギャップを含んだ現在行の順位を返します。すなわちピアグループの先頭行のrow_numberと同じになります。 @@ -23478,8 +30733,11 @@ SELECT count(*) FROM sometable; bigint + +ギャップを含まない現在行の順位。この関数は実質的にピアのグループ数を数えます。 @@ -23492,9 +30750,13 @@ SELECT count(*) FROM sometable; double precision + +現在行の相対順位、すなわち (rank - 1) / (パーティションの総行数 - 1)を返します。 +したがってこの値は境界を含み0から1となります。 @@ -23507,9 +30769,13 @@ SELECT count(*) FROM sometable; double precision + +現在行の相対順位、すなわち (現在行より先行する行およびピアの行数) / (パーティションの総行数)を返します。 +したがってこの値は1/Nから1となります。 @@ -23522,8 +30788,11 @@ SELECT count(*) FROM sometable; integer + +できるだけ等価にパーティションを分割した、1から引数値までの整数を返します。 @@ -23538,6 +30807,7 @@ SELECT count(*) FROM sometable; anycompatible + +パーティション内の現在行よりoffset行だけ前の行で評価されたvalueを返します。 +該当する行がない場合、その代わりとしてdefault(valueと互換性のある型でなければなりません)を返します。 +offsetdefaultは共に現在行について評価されます。 +省略された場合、offsetはデフォルトで1となり、defaultNULLになります。 @@ -23563,6 +30838,7 @@ SELECT count(*) FROM sometable; anycompatible + +パーティション内の現在行よりoffset行だけ後の行で評価されたvalueを返します。 +該当する行がない場合、その代わりとしてdefault(valueと互換性のある型でなければなりません)を返します。 +offsetdefaultは共に現在行について評価されます。 +省略された場合、offsetはデフォルトで1となり、defaultNULLになります。 @@ -23586,8 +30867,11 @@ SELECT count(*) FROM sometable; anyelement + +ウィンドウフレームの最初の行である行で評価されたvalueを返します。 @@ -23600,8 +30884,11 @@ SELECT count(*) FROM sometable; anyelement + +ウィンドウフレームの最後の行である行で評価されたvalueを返します。 @@ -23614,10 +30901,13 @@ SELECT count(*) FROM sometable; anyelement + +ウィンドウフレームの(1から数えて)n番目の行である行で評価されたvalueを返します。行が存在しない場合はNULLを返します。 @@ -23625,6 +30915,7 @@ SELECT count(*) FROM sometable;
+ +に列挙された関数はすべて、対応するウィンドウ定義のORDER BY句で指定されるソート順に依存します。 +ORDER BYの列だけを考慮した場合に重複する行はピアと呼ばれます。 +4つの順位付け関数(cume_distを含む)は、すべてのピア行に対して同じ答えになるように定義されています。 + +first_valuelast_valuenth_value関数はウィンドウフレーム内の行のみを考慮することに注意してください。 +デフォルトで、ウィンドウフレームにはパーティションの先頭から現在の行の最終ピアまでの行が含まれます。 +これはlast_value、または時々nth_valueでは有用ではない結果を得ることになりがちです。 +OVER句に適切なフレーム指定(RANGEGROUP、もしくはROWS)を加えることで、フレームを再定義することができます。 +フレーム指定についての詳細はを参照してください。 + +集約関数をウィンドウ関数として使用する場合、現在の行のウィンドウフレーム内の行に渡って集約処理を行います。 +ORDER BYおよび、デフォルトのウィンドウフレーム定義を使用した集約では、中間和のような動作を行います。これが望まれる場合もあれば、望まれない場合もあります。 +パーティション全体に渡る集約処理を行うためには、ORDER BYを省略するかROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGを使用してください。 +他のフレーム指定を使用することで様々な結果を得ることができます。 + +標準SQLは、leadlagfirst_valuelast_value、およびnth_valueに対しRESPECT NULLS、またはIGNORE NULLSオプションを定義します。 +これはPostgreSQLに実装されていません。動作は常に標準のデフォルトと同一です。つまり、RESPECT NULLSです。 +同様にして、標準のnth_valueに対するFROM FIRST、またはFROM LASTオプションは実装されていません。デフォルトのFROM FIRST動作のみに対応しています。 +(ORDER BY順序付けを逆に行うことで、FROM LASTの結果を得ることができます。)
+ + + + マージサポート関数 MERGE @@ -23686,23 +31005,36 @@ SELECT count(*) FROM sometable; + +PostgreSQLには、各行に対して行われたアクションを識別するためにコマンドのRETURNINGリストで使用されるマージサポート関数が1つ含まれています。 +詳細はを参照してください。 + + マージサポート関数 + +関数 + +説明 @@ -23717,9 +31049,13 @@ SELECT count(*) FROM sometable; text + +現在の行に対して実行されたマージアクションコマンドを返します。 +これは'INSERT''UPDATE'、または'DELETE'になります。 @@ -23727,7 +31063,10 @@ SELECT count(*) FROM sometable;
+ +例: + +この関数はMERGEコマンドのRETURNINGリストでのみ使用可能であることに注意してください。 +問い合わせの他の部分で使用するとエラーになります。
+ + 副問い合わせ式 EXISTS @@ -23788,10 +31134,14 @@ MERGE INTO products p + +本節ではPostgreSQLで使用できるSQL準拠の副問い合わせについて説明します。 +本節で記載した全ての式は結果として論理値(真/偽)を返します。 @@ -23802,40 +31152,60 @@ EXISTS (subquery) + +EXISTSの引数は、任意のSELECT文、つまり副問い合わせです。 +副問い合わせはそれが何らかの行を返すか否かの決定のために評価されます。 +もし1つでも行を返すのであれば、EXISTSの結果はtrue(真)となり、副問い合わせが行を返さない場合、EXISTSの結果はfalse(偽)となります。 + +副問い合わせは、取り囲んでいる問い合わせから変数を参照することができ、その値は副問い合わせの評価時には定数として扱われます。 + +この副問い合わせは通常、最後まで実行されず、少なくとも1つの行が返されたかどうかを判定し得るに足りる時点まで実行されます。 +(シーケンス関数を呼び出すような)副作用のある副問い合わせを記述することは配慮不足です。副作用が生じるかどうかは予想できません。 + +結果は何らかの行が返されるのかのみに依存し、それらの行の内容には依存しないことから、副問い合わせの出力リストは通常重要ではありません。 +よく使われるコーディング規約は、全てのEXISTSテストをEXISTS(SELECT 1 WHERE ...)といった形式で記述することです。 +とは言っても、INTERSECTを使う副問い合わせのようにこの規則には例外があります。 + +以下の簡単な例はcol2上の内部結合に似ていますが、たとえtab2の行といくつか一致したとしてもtab1のそれぞれの行に対して最大限1つの出力行を生成します。 SELECT col1 FROM tab1 @@ -23852,25 +31222,38 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +右辺は括弧で括られた副問い合わせで、正確に1列を返すものでなければなりません。 +左辺式は評価され、副問い合わせの結果行と比較されます。 +副問い合わせの行のどれかと等しい場合、INの結果はtrue(真)です。 +(副問い合わせが行を返さない場合を含め)等しい行が見つからない場合、結果はfalse(偽)です。 + +左辺の式がNULLを生じる場合、または右側の値に等しいものがなくて少なくとも1つの右辺の行がNULLを持つ場合、IN構文の結果は偽ではなくNULLとなることに注意してください。 +これは、NULL値の論理的な組み合わせに対するSQLの標準規則に従うものです。 + +EXISTSと同様、副問い合わせが完全に評価されることを前提としてはなりません。 @@ -23878,6 +31261,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +INのこの形式の左辺は、で説明する、行のコンストラクタです。 +右辺は括弧で括られた副問い合わせで、左辺の行にある式の数と正確に同じ数の列を返さなければなりません。 +左辺の式は副問い合わせの結果のそれぞれの行に対し、行に関して評価、比較が行われます。 +副問い合わせの行に等しいものが見つかった場合、IN の結果はtrue(真)となります。 +(副問い合わせが行を返さない場合を含め)等しい行が見つからない場合、結果はfalse(偽)です。 + +通常通り、行にあるNULL値はSQLの論理式の標準規則で結合されます。 +2つの行は対応する全ての構成要素が非NULLかつ等しい場合に等しいとみなされます。 +1つでも対応する構成要素が非NULLかつ等しくないものがあれば、2つの行は等しくないとみなされます。 +それ以外の場合、その行の比較結果は不明(NULL)です。 +行毎の結果すべてが不等もしくはNULLの場合、少なくとも1つのNULLがあると、INの結果はNULLとなります。 @@ -23908,25 +31305,38 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +右辺は括弧で括られた副問い合わせで、正確に1つの列を返さなければなりません。 +左辺の式は副問い合わせ結果の行それぞれに対して評価、比較されます。 +等しくない副問い合わせの行だけがある(副問い合わせが行を返さない場合を含む)と、NOT INの結果はtrue(真)です。 +等しい行が1つでもあれば、結果はfalse(偽)です。 + +左辺の式でNULLが生じる場合、または右辺の値に等しいものがなく、少なくとも1つの右辺の式がNULLを生み出す場合、NOT IN構文の結果は真ではなくNULLとなることに注意してください。 +これは、NULL値の論理的な組み合わせに対するSQLの標準規則に従うものです。 + +EXISTSと同様、副問い合わせが完全に評価されることを前提としてはなりません。 @@ -23934,6 +31344,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +NOT INのこの形式の左辺は、で説明する行コンストラクタです。 +右辺は括弧で括られた副問い合わせで、左辺の行にある式の数と正確に同じ数の列を返さなければなりません。 +左辺の式は副問い合わせの結果のそれぞれの行に対し、評価、比較が行われます。 +副問い合わせの行に不等のもののみが見つかった場合(副問い合わせが行を返さない場合を含む)、NOT INの結果はtrue(真)となります。 +等しい行が1つでも見つかった場合、結果はfalse(偽)です。 + +通常通り、行にあるNULL値はSQLの論理式の標準規則で結合されます。 +2つの行は対応する全ての構成要素が非NULLかつ等しい場合に等しいとみなされます。 +1つでも構成要素が非NULLかつ等しくない場合、2つの行は等しくないとみなされます。 +それ以外の場合、その行の比較結果は不明(NULL)です。 +行毎の結果すべてが不等もしくはNULLの場合、少なくとも1つのNULLがあると、NOT INの結果はNULLとなります。 @@ -23965,6 +31389,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +右辺は括弧で括られた副問い合わせで、正確に1つの列を返さなければなりません。 +左辺の式は副問い合わせの結果行それぞれに対して、指定されたoperatorを使用して評価、比較されます。なお、operatorは結果として論理値を生成する必要があります。 +真の結果が1つでもあると、ANYの結果はtrue(真)です。 +真の結果がない(副問い合わせが行を返さない場合を含む)と、結果はfalse(偽)です。 + +SOMEANYの同義語です。 +IN= ANYと等価です。 + +成功がなく、右辺の行が演算子の結果として1つでもNULLを生成した場合、ANY構文の結果は偽ではなくNULLになることに注意してください。 +これは、NULL値の論理的な組み合わせに対するSQLの標準規則に従うものです。 + +EXISTSと同様、副問い合わせが完全に評価されることを前提としてはなりません。 @@ -23999,6 +31440,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +ANYのこの形式の左辺は、で説明されている行コンストラクタです。 +右辺は括弧で括られた副問い合わせで、左辺の行にある式の数と正確に同じ数の列を返さなければなりません。 +左辺の式は副問い合わせの結果のそれぞれの行に対し、与えられたoperatorを使用して行に関する評価、比較が行われます。 +比較の結果、副問い合わせの行のどれかに対して真となる場合、ANYの結果はtrue(真)です。 +比較の結果、副問い合わせの全ての行に対して偽となる場合(副問い合わせが行を返さないという場合も含む)、結果はfalse(偽)です。 +いかなる副問い合わせ行との比較の結果も偽を返さず、かつ、少なくとも1つの比較がNULLを返す場合、結果はNULLになります。 + +行コンストラクタ比較の意味についての詳細はを参照して下さい。 @@ -24029,6 +31481,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +右辺は括弧で括られた副問い合わせで、正確に1つの列を返さなければなりません。 +左辺の式は副問い合わせの結果行それぞれに対して、指定されたoperatorを使用して評価、比較されます。なお、operatorは結果として論理値を生成する必要があります。 +全ての行が真になる場合(副問い合わせが行を返さない場合を含む)、ALLの結果はtrue(真)です。 +1つでも偽の結果があると、結果はfalse(偽)です。 +比較がどの行でも偽を返さず、かつ、少なくとも1つの行でNULLを返した場合、結果はNULLとなります。 + + NOT IN<> ALLと等価です。 + +EXISTSと同様、副問い合わせが完全に評価されることを前提としてはなりません。 @@ -24055,6 +31520,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +ALLのこの形式の左辺は、で説明する行コンストラクタです。 +右辺は括弧で括られた副問い合わせで、左辺の行にある式の数と正確に同じ数の列を返さなければなりません。 +左辺の式は副問い合わせの結果のそれぞれの行に対し、与えられたoperatorを使用して行に関する評価、比較が行われます。 +比較した結果、すべての副問い合わせ行に対して真を返す場合(副問い合わせが行を返さないという場合も含む)、ALLの結果はtrue(真)となります。 +比較した結果、いずれかの副問い合わせ行で偽を返す場合、この結果はfalse(偽)となります。 +比較結果がすべての副問い合わせ行に対して偽を返さず、少なくとも1行でNULLを返す場合、結果はNULLとなります。 + +行コンストラクタに関する比較の意味についてはを参照してください。 + + 単独行に関する比較 comparison subquery result row + + 比較 + 副問い合わせ結果行 + row_constructor operator (subquery) + +左辺は、で説明されている行コンストラクタです。 +右辺は括弧で括られた副問い合わせで、左辺の行とまったく同じ数の列を返さなければなりません。さらに、副問い合わせは複数行を返すことはできません。 +(行をまったく返さない場合、結果はNULLとみなされます。) +左辺は副問い合わせの結果の単一行に対し行全体で評価、比較が行われます。 + +行コンストラクタに関する比較の意味についての詳細はを参照してください。 + + 行と配列の比較 IN @@ -24134,20 +31629,35 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); composite type comparison + + 複合型 + 比較 + row-wise comparison + + 行に関する比較 + comparison composite type + + 比較 + 複合型 + comparison row constructor + + 比較 + 行コンストラクタ + IS DISTINCT FROM @@ -24158,6 +31668,7 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +本節では、値のグループ間で複数の比較を行う、さまざまな特殊化したコンストラクトについて説明します。 +この形式は構文的には、前節の副問い合わせ形式と関係しています。しかし、副問い合わせを含みません。 +配列副式を含む形式はPostgreSQLの拡張ですが、それ以外はSQL準拠です。 +本節で記載した全ての式形式は結果として論理値(真/偽)を返します。 @@ -24177,10 +31693,15 @@ WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); + +右辺は括弧で括られた式のリストです。 +左辺の式の結果が右辺の式のいずれかと等しい場合、結果はtrue(真)になります。 +これは以下の省略形です。 expression = value1 @@ -24192,11 +31713,15 @@ OR + +左辺の式がNULLを生じる場合、または右側の値に等しいものがなくて少なくとも1つの右辺の行がNULLを持つ場合、IN構文の結果は偽ではなくNULLとなることに注意してください。 +これは、NULL値の論理的な組み合わせに対するSQLの標準規則に従うものです。 @@ -24208,10 +31733,15 @@ OR + +右辺は括弧で括られた式のリストです。 +左辺の式の結果が右辺の式の全てと等しくない場合、結果はです。 +これは以下の省略形です。 expression <> value1 @@ -24223,26 +31753,38 @@ AND + +左辺の式でNULLが生じる場合、または右辺の値に左辺の式と等しいものがなく、かつ少なくとも1つの右辺の式がNULLを生じる場合、NOT IN構文の結果は、一部の人が予想する真ではなく、NULLとなることに注意してください。 +これは、NULL値の論理的な組み合わせに対するSQLの標準規則に従うものです。 + +全ての場合において、x NOT IN yNOT (x IN y)と等価です。 +しかし、INを使用するよりもNOT INを使用する方が初心者がNULL値による間違いをしやすくなります。 +可能な限り条件を肯定的に表現することが最善です。 + + <literal>ANY</literal>/<literal>SOME</literal> (配列) expression operator ANY (array expression) @@ -24250,6 +31792,7 @@ AND + +右辺は括弧で括られた式で、配列値を返さなければなりません。 +左辺の式は配列要素それぞれに対して、指定されたoperatorを使用して評価、比較されます。なお、operatorは結果として論理値を生成する必要があります。 +真の結果が1つでもあると、ANYの結果はtrue(真)です。 +真の結果がない(配列の要素数がゼロである場合を含む)と、結果はfalse(偽)です。 + +配列式がNULL配列を生成する場合、ANYの結果はNULLになります。 +左辺式がNULLとなる場合、ANYの結果は通常NULLになります(STRICTでない比較演算子では異なる結果になるかもしれません)。 +また、右辺の配列にNULL要素が含まれ、かつ、比較の結果、真が得られなかった場合、ANYの結果は偽ではなくNULLになります(ここでも、STRICTな演算子の場合です)。 +これは、NULLに対する、SQLの論理値組み合わせに関する標準規則に従うものです。 + +SOMEANYの同義語です。 + + <literal>ALL</literal> (配列) expression operator ALL (array expression) + +右辺は括弧で括られた式で、配列値を返さなければなりません。 +左辺の式は配列の要素それぞれに対して、指定されたoperatorを使用して評価、比較されます。なお、operatorは結果として論理値を生成する必要があります。 +全ての比較が真になる場合(配列の要素数がゼロである場合を含む)、ALLの結果はtrue(真)です。 +1つでも偽の結果があると、結果はfalse(偽)です。 + +配列式がNULL配列を生成する場合、ALLの結果はNULLになります。 +左辺式がNULLとなる場合、ALLの結果は通常NULLになります(厳格でない比較演算子では異なる結果になるかもしれません)。 +また、右辺の配列にNULL要素が含まれ、かつ、比較の結果、偽が得られなかった場合、ALLの結果は真ではなくNULLになります(ここでも、厳格な演算子の場合です)。 +これは、NULLに対する、SQLの論理値組み合わせに関する標準規則に従うものです。 + + 行コンストラクタの比較 row_constructor operator row_constructor + +で説明されているように、両辺は行コンストラクタです。 +2つの行コンストラクタは同じ数のフィールドを持つ必要があります。 +指定された演算子は、対応するフィールドの各ペアに適用されます。 +(フィールドのタイプが異なる場合があるため、これは、各ペアに対して異なる特定の演算子を選択できることを意味します。) +選択される演算子はすべて、B-ツリー演算子クラスのメンバ、またはB-ツリー演算子クラスの=メンバの否定子である必要があります。 +つまり、行コンストラクタ比較は、演算子=<><<=>>=の場合、またはこれらのいずれかに類似したセマンティクスを持つ場合にのみ可能です。 + +=<>の場合、他と動作が多少異なります。 +2つの行は対応する全ての構成要素が非NULLかつ等しい場合に等しいとみなされます。 +1つでも構成要素が非NULLかつ等しくない場合、2つの行は等しくないとみなされます。 +それ以外の場合、その行の比較結果は不明(NULL)です。 + +<<=>>=の場合、行の要素は左から右に比較されます。そして、不等またはNULLの組み合わせが見つかったところで停止します。 +要素の組み合わせのどちらかがNULLであった場合、行比較の結果は不明(NULL)です。さもなくば、要素の組み合わせの比較により結果が決まります。 +例えば、ROW(1,2,NULL) < ROW(1,3,0)は、3番目の要素の組み合わせまで進まないため、NULLではなく真を返します。 @@ -24363,11 +31957,16 @@ AND + +このコンストラクトは<>行比較と類似していますが、NULL入力に対してNULLを生成しない点が異なります。 +その代わりに、全てのNULL値は非NULL値と等しくない(DISTINCT FROM)ものとみなされ、また、2つのNULLは等しい(NOT DISTINCT)ものとみなされます。 +したがって、結果は真か偽のいずれかで、NULLにはなりません。 @@ -24375,23 +31974,32 @@ AND + +このコンストラクトは=行比較と類似していますが、NULL入力に対してNULLを生成しません。 +代わりに、NULL値を、すべての非NULLの値に対して不等(DISTINCT FROM)とみなし、2つのNULLを等しいもの(NOT DISTINCT)とみなします。 +したがって、結果は常に真か偽となり、NULLになることはありません + + 複合型の比較 record operator record + +SQL仕様では、結果が2つのNULL値、またはNULLと非NULLの比較に依存するのであれば、行の観点からの比較はNULLを返すことを要求されています。 +PostgreSQLは、(にあるように)2つの行コンストラクタの出力の比較を行う時、または副問い合わせの出力に対し(にあるように)行コンストラクタの比較を行う時のみこれを実施します。 +2つの複合型の値が比較されるほかの状況では、2つのNULLフィールドの値は等しいと考えられ、NULLは非NULLより大きいとみなされます。 +複合型に対して、これは一貫した並べ替えとインデックス付け動作担保のため必要です。 + +各辺が評価され、行単位で比較が行なわれます。 +複合型の比較はoperator=<><<=>>=またはそのいずれかと類似の意味を持つ場合に許されます。 +(正確には、演算子はB-tree演算子クラスのメンバである場合、またはB-tree演算子クラスの=メンバの否定子である場合に行比較演算子となり得ます。) +上記の演算子のデフォルトの動作は、行コンストラクタに対するIS [ NOT ] DISTINCT FROMと同じです(参照)。 + +デフォルトのB-tree演算子クラスを持たない要素を含む行の一致をサポートするために、いくつかの演算子が複合型の比較のために定義されています。 +それは*=*<>*<*<=*>*>=です。 +上記の演算子は2つの行の内部バイナリ表現を比較します。 +2つの行の等価演算子での比較が真であっても、2つの行はバイナリ表現が異なるかもしれません。 +上記の比較演算子での行の順序は決定論的ですが、それ以外は意味がありません。 +上記の演算子はマテリアライズドビューで内部的に使われ、レプリケーションやB-Treeの重複除去(参照)のような他の特定の目的のためには有用かもしれませんが、問い合わせを書くのに一般的に有用であるようには意図していません。 + + 集合を返す関数 set returning functions functions + + 集合を返す関数 + 関数 + + +本節では、場合により複数行を返す関数について説明します。 +このクラスで最も広く用いられている関数は、、およびにて詳細が触れられている、連続値生成関数です。 +他方、より特化された集合を返す関数の記述がこのマニュアルの他の場所にあります。 +集合を返す関数を複数組み合わせる方法についてはを参照してください。 + + 連続値生成関数 + +関数 + +説明 @@ -24494,10 +32143,14 @@ AND setof numeric + +startからstopまで、刻みstepで連続する値を生成します。 +stepのデフォルトは1です。 @@ -24511,6 +32164,7 @@ AND setof timestamp with time zone + +startからstopまで、刻みstepで連続する値を生成します。 +時間帯を認識する形式では、timezone引数、あるいはもしそれが省略されているなら現在の設定によって指定される時間帯にしたがって時刻と夏時間調整が計算されます。 @@ -24525,6 +32182,7 @@ AND
+ +stepが正の場合、startstopよりも大きいと0行が返ります。 +反対に、stepが負の場合は、startstopよりも小さいと0行が返ります。 +また、どれかの入力がNULLの場合も0行が返ります。 +stepが0の時はエラーになります。 +以下にいくつか例を示します。 SELECT * FROM generate_series(2,4); generate_series @@ -24562,7 +32226,10 @@ SELECT generate_series(1.1, 4, 1.3); 3.7 (3 rows) --- this example relies on the date-plus-integer operator: + +-- この例は日付に整数を足し込む演算子に依存します。 SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a); dates ------------ @@ -24608,15 +32275,24 @@ SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz, + + 添え字生成関数 + +関数 + +説明 @@ -24631,8 +32307,11 @@ SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz, setof integer + +指定した配列のdim次元で有効な添え字を構成する連番を生成します。 @@ -24642,10 +32321,14 @@ SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz, setof integer + +指定した配列dim次元で有効な添え字を構成する連番を生成します。 +reverseが真の場合、連番は逆順に返されます。 @@ -24653,12 +32336,17 @@ SELECT * FROM generate_series('2001-10-22 00:00 -04:00'::timestamptz,
+ +generate_subscriptsは、指定した配列の指定した次数で有効な添え字からなる集合を生成するために便利な関数です。 +要求された次数を持たない配列またはどれかの入力がNULLなら0行が返ります。 +いくつかの例を以下に示します。 -- basic usage: SELECT generate_subscripts('{NULL,1,NULL,2}'::int[], 1) AS s; @@ -24670,8 +32358,12 @@ SELECT generate_subscripts('{NULL,1,NULL,2}'::int[], 1) AS s; 4 (4 rows) --- presenting an array, the subscript and the subscripted --- value requires a subquery: + +-- 配列、添え字とその添え字が示す値を表示するには +-- 副問い合わせが必要です。 SELECT * FROM arrays; a -------------------- @@ -24690,7 +32382,10 @@ FROM (SELECT generate_subscripts(a, 1) AS s, a FROM arrays) foo; {100,200,300} | 3 | 300 (5 rows) --- unnest a 2D array: + +-- 2次元配列の入れ子を解きます。 CREATE OR REPLACE FUNCTION unnest2(anyarray) RETURNS SETOF anyelement AS $$ select $1[i][j] @@ -24712,17 +32407,27 @@ SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]); ordinality + + 順序性 + + +FROM句の関数の後にWITH ORDINALITYが付いている場合、1から始まり関数の出力の行毎に1増えていくbigint列が関数の出力列に追加されます。 +これはunnest()のような集合を返す関数の場合に最も役に立ちます。 --- set returning function WITH ORDINALITY: + +-- WITH ORDINALITYの付いた集合を返す関数 SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); ls | n -----------------+---- @@ -24752,38 +32457,63 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n);
+ + システム情報関数と演算子 + +本節で説明する関数は、PostgreSQLのインストレーションに関するさまざまな情報を取得するために使用されます。 + + セッション情報関数 + +に、セッションおよびシステムの情報を抽出する関数を示します。 + +本節で列挙されている関数のほかに、同様にシステム情報を提供する統計システムに関連した数多くの関数があります。 +にさらに情報があります。 + + セッション情報関数 + +関数 + +説明 @@ -24805,10 +32535,14 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name + +現在のデータベースの名前を返します。 +(データベースは標準SQLではカタログと呼ばれています。ですから標準での記述はcurrent_catalogとなります。) @@ -24821,8 +32555,11 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); text + +クライアントから送信された現在実行中問い合わせのテキスト(複数の文を含むことあります)を返します。 @@ -24835,7 +32572,10 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name + +current_userと同じです。 @@ -24856,10 +32596,14 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name + +検索パスの先頭にあるスキーマの名前を返します。(検索パスが空ならNULL値を返します。) +これはターゲットスキーマを指定せずに作成されるすべてのテーブルあるいは名前付きのオブジェクトで使われるスキーマです。 @@ -24876,12 +32620,17 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name[] + +現在有効な検索パス中にあるすべてのスキーマの名前を優先順に配列で返します。 +(現在の設定にある項目で、存在する検索可能なスキーマに関連しないものは無視されます。) +論理値引数がならpg_catalogのような暗黙的に検索されるシステムスキーマは結果に含まれます。 @@ -24898,7 +32647,10 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name + +現在の実行コンテキストのユーザ名を返します。 @@ -24911,9 +32663,12 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); inet + +現在のクライアントのIPアドレスを返します。UNIXドメインソケット経由の接続ならNULLが返ります。 @@ -24926,9 +32681,12 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); integer + +現在のクライアントのIPポート番号を返します。UNIXドメインソケット経由の接続ならNULLが返ります。 @@ -24941,10 +32699,13 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); inet + +サーバが受け付けている現在の接続のIPアドレスを返します。UNIXドメインソケット経由の接続ならNULLが返ります。 @@ -24957,10 +32718,13 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); integer + +サーバが受け付けている現在の接続のIPポート番号を返します。UNIXドメインソケット経由の接続ならNULLが返ります。 @@ -24973,8 +32737,11 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); integer + +現在のセッションに結びついているサーバプロセスのプロセスIDを返します。 @@ -24987,12 +32754,16 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); integer[] + +指定したサーバプロセスIDによるロック取得をブロックしているプロセスIDを配列で返します。そのようなサーバプロセスが存在しないかあるいはブロックしていない場合は空の配列が返ります。 + +あるサーバプロセスが別のサーバプロセスをブロックするのは、ブロックされるプロセスのロック要求と競合するロックを保持している場合(ハードブロック)、あるいは、ブロックされるプロセスのロック要求と競合するロックを待っていて、かつロック待ちキュー内でより前方にいる場合(ソフトブロック)です。 +パラレルクエリを使っている場合、実際のロックを子ワーカープロセスが保持または待っている場合であっても、この結果には必ずクライアントから可視のプロセスID(つまり、pg_backend_pidの結果)が示されます。 +そのような仕様なので、この結果には重複するPIDが含まれることもあります。 +また、プリペアドのトランザクションが競合するロックを保持している場合、この関数の結果ではプロセスIDがゼロとして示されることにも注意して下さい。 + +頻繁にこの関数を呼び出すとデータベースの性能に影響があるかも知れません。ロックマネージャの共有状態への短期的な排他ロックの取得が必要だからです。 @@ -25020,11 +32799,16 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); timestamp with time zone + +サーバ設定ファイルが最後に読み込まれた時の時刻を返します。 +現在のセッションがそのときに活動中だった場合、これはそのセッション自身が設定ファイルを再読み込みした時刻になります。(ですからその結果はセッションによって少し異なるかもしれません。) +それ以外の場合は、postmasterプロセスが設定ファイルを再読み込みした時刻になります。 @@ -25037,19 +32821,32 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); Loggingpg_current_logfile function + + Logging + pg_current_logfile関数 + current_logfiles and the pg_current_logfile function + + current_logfiles + とpg_current_logfile関数 + Logging current_logfiles file and the pg_current_logfile function + + Logging + current_logfilesファイルとpg_current_logfile関数 + pg_current_logfile ( text ) text + +ログ収集機構が現在使用しているログファイルのパス名を返します。 +パスにはディレクトリとログファイルの名前が含まれます。 +ログ収集が無効ならば戻り値はNULLになります。 +複数のログファイルがそれぞれ異なる形式で存在する場合、引数なしのpg_current_logfileは、順序リスト(stderrcsvlogjsonlog)の最初に出てくる形式のファイルのパスを返します。 +これらの形式のログファイルがないときはNULLが返されます。 +特定のファイル形式を要求するには、オプションパラメータの値としてcsvlogjsonlog、またはstderrをオプション引数の値として渡してください。 +指定のログ形式がで設定されていない場合は、戻り値がNULLとなります。 +結果はcurrent_logfilesファイルの内容を反映します。 + + + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールの権限を持つロールに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -25089,6 +32898,7 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); file_nametext ) + +現在のサーバセッションにロードされているロード可能なモジュールの一覧を返します。 +module_nameフィールドとversionフィールドは、モジュール作成者がPG_MODULE_MAGIC_EXTマクロを使用して値を指定しない限り、NULLになります。 +file_nameフィールドは、モジュール(共有ライブラリ)のファイル名を示します。 @@ -25108,8 +32922,11 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); oid + +現在のセッションの一時スキーマのOIDを返します。(一時テーブルをまだ1つも作成しておらず)存在しなければゼロを返します。 @@ -25122,9 +32939,13 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); boolean + +指定したOIDが他のセッションの一時スキーマのOIDであれば、真を返します。 +(例えば、他のセッションの一時テーブルをカタログ表示から除外したい場合などで有用です。) @@ -25137,10 +32958,13 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); boolean + +JITコンパイラ拡張が利用可能で(参照)、設定パラメータがonなら真を返します。 @@ -25153,7 +32977,10 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); boolean + +サーバがNUMAサポート付きでコンパイルされている場合はtrueを返します。 @@ -25166,8 +32993,11 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); setof text + +今のセッションにおいて現在待ち受け中の非同期通知チャンネル名の集合を返します。 @@ -25180,11 +33010,15 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); double precision + +非同期通知キューの最大サイズのうち、処理待ちの通知によって占められている現在の割合(0から1まで)を返します。 +詳細はをご覧ください。 @@ -25197,7 +33031,10 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); timestamp with time zone + +サーバの起動時刻を返します。 @@ -25210,23 +33047,33 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); integer[] + +指定のサーバプロセスIDによる安全なスナップショットの取得をブロックしているセッションのサーバプロセスIDの配列を返します。そのようなサーバプロセスがないか、ブロックされていない場合は空の配列が返ります。 + +SERIALIZABLEトランザクションを実行しているセッションは、SERIALIZABLE READ ONLY DEFERRABLEトランザクションが述語ロックの取得をすべて回避しても安全であると決定するまで、後者がスナップショットを取得するのをブロックします。 +シリアライザブルトランザクションおよび遅延可能トランザクションについてのさらなる情報についてはを参照してください。 + +この関数を頻繁に呼び出すと、短時間に述語ロックマネージャの共有状態にアクセスする必要があるため、データベースのパフォーマンスに若干の影響が出るかもしれません。 @@ -25239,9 +33086,12 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); integer + +PostgreSQLのトリガの現在の入れ子の深さを返します。(直接的であれ間接的であれ、トリガ内部から呼ばれていなければ0を返します)。 @@ -25254,7 +33104,10 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name + +セッションのユーザ名を返します。 @@ -25267,6 +33120,7 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); text + +認証方式と、データベースロールが割り当てられる前にユーザが認証サイクル中に提示したID(存在する場合)を戻します。 +ユーザが認証されている場合はauth_method:identityとして表示します。ユーザが認証されていない場合(たとえばTrust認証が使用されている場合)はNULLとして表示します。 @@ -25286,7 +33143,10 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); name + +current_userと等価です。 @@ -25295,6 +33155,7 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); + +current_catalogcurrent_rolecurrent_schemacurrent_usersession_userおよびuserSQLにおいて特殊な構文上の地位を持っており、最後に括弧を付けずに呼び出さなければなりません。 +PostgreSQLではcurrent_schemaの場合括弧を使用することができますが、他は使えません。 + +session_userは、通常、現在のデータベース接続を開始したユーザです。しかし、スーパーユーザはこの設定をを使用して変更することができます。 +current_userは、権限の検査に適用されるユーザ識別子です。 +通常はセッションユーザと同じですが、を使用して変更可能です。 +SECURITY DEFINER属性を持つ関数の実行中にも変わります。 +Unix用語で言うと、セッションユーザは実ユーザで、現在のユーザは実効ユーザです。 +current_roleusercurrent_userの同義語です。 +(標準SQLではcurrent_rolecurrent_userを区別していますが、PostgreSQLではユーザとロールを1種類のエンティティに統合しているため、両者に区別はありません。) + + アクセス権限照会関数 privilege querying + + 権限 + 問い合わせ + + +に列挙した関数を使用して、ユーザはオブジェクトのアクセス権限をプログラムから問い合わせることができます。 +権限についての詳細は、を参照してください。 +これらの関数では権限を検査されるユーザは名前かOID(pg_authid.oid)で指定できます。 +名前がpublicとして与えられるとPUBLIC仮想ロールの権限が検査されます。 +また、user引数を完全に省略できます。この場合はcurrent_userを指定したと見なされます。 +検査されるオブジェクトも名前かOIDで指定できます。 +名前で指定する時は関連するスキーマ名を含んでも構いません。 +対象となるアクセス権限はテキスト文字列で指定します。その文字列はオブジェクト型(たとえばSELECT)へと評価されなければならない適切なアクセスキーワードで指定します。 +その権限が許可オプションで保持されるかどうかをテストするためにオプションでWITH GRANT OPTIONを権限型に追加できます。 +また、複数の権限型をカンマで区切って列挙できます。この場合はどれかの権限が保持されていれば結果は真となります。 +(権限文字列は大文字小文字の区別がなく、追加の空白を権限文字列の間に入れることができますが、権限名の中に入れることはできません。) SELECT has_table_privilege('myschema.mytable', 'select'); SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION'); @@ -25368,15 +33261,24 @@ SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION')
+ + アクセス権限照会関数 + +関数 + +説明 @@ -25394,6 +33296,7 @@ SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION') boolean + +ユーザがテーブルのどれか1つの列に対して権限を所有しているか? +テーブル全体あるいは列レベルの権限が少なくとも1つの列に与えられていれば成功します。 +可能な権限型はSELECTINSERTUPDATEREFERENCESです。 @@ -25417,6 +33324,7 @@ SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION') boolean + +ユーザがテーブルの指定された(1つの)列に対して権限を所有しているか? +テーブル全体あるいはその列に対して列レベルの権限が与えられていれば成功します。 +名前かアトリビュート番号(pg_attribute.attnum)で列を指定できます。 +可能な権限型はSELECTINSERTUPDATEREFERENCESです。 @@ -25440,6 +33353,7 @@ SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION') boolean + +ユーザはデータベースに対する権限があるか? +可能な権限型はCREATECONNECTTEMPORARYTEMP (TEMPORARYと同じです)です。 @@ -25462,8 +33379,12 @@ SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION') boolean + +現在のユーザは外部データラッパーに対する権限があるか? +可能な権限型はUSAGEだけです。 @@ -25479,14 +33400,22 @@ SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION') boolean + +ユーザは関数に対する権限があるか? +可能な権限型はEXECUTEだけです。 + +関数をOIDではなく名前で指定する場合、regprocedureデータ型(を参照)と同じ入力が可能です。 +例を示します。 SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); @@ -25505,8 +33434,12 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザは言語に対する権限があるか? +可能な権限型はUSAGEだけです。 @@ -25522,9 +33455,13 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザはラージオブジェクトに対する権限があるか? +可能な権限型はSELECTUPDATEです。 @@ -25540,10 +33477,15 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザに構成パラメータに対する権限があるか? +パラメータ名では大文字と小文字が区別されません。 +使用可能な権限タイプはSETおよびALTER SYSTEMです。 @@ -25559,10 +33501,14 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザはスキーマに対する権限があるか? +可能な権限型はCREATEUSAGEです。 @@ -25578,11 +33524,15 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザはシーケンスに対する権限があるか? +可能な権限型はUSAGESELECTUPDATEです。 @@ -25598,8 +33548,12 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザは外部サーバに対する権限があるか? +可能な権限型はUSAGEだけです。 @@ -25615,12 +33569,16 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザはテーブルに対する権限があるか? +可能な権限型はSELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERMAINTAINです。 @@ -25636,8 +33594,12 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザはテーブル空間に対する権限があるか? +可能な権限型はCREATEです。 @@ -25653,11 +33615,16 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザにデータ型に対する権限があるか? +可能な権限型はUSAGEだけです。 +OIDではなく名前で型を指定する際は、可能な入力はregtypeデータ型に対するのと同じものです(参照)。 @@ -25673,6 +33640,7 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +ユーザにロールに対する権限があるか? +可能な権限型はMEMBERUSAGESETです。 +特定の権限が与えられているかどうかにかかわらず、MEMBERは直接あるいは間接的にそのロールのメンバであることを示します。(すなわち、SET ROLEを実行する権限です) +SETSET ROLEコマンドを用いてロールに変更を加えることができるかどうかを示すのに対し、USAGEは、そのロールの権限がSET ROLEを実行することなく、直ちに利用可能であることを示します。 +WITH ADMIN OPTIONまたはWITH GRANT OPTIONは、ADMIN権限が保持されているかどうかに関係なく、これらのいずれの権限にもテストのために追加できます(これら6つの綴りはすべて同じテストを行います)。 +この関数はuserpublicに設定する特別なケースを許可しません。 +PUBLIC仮想ロールは実在するロールのメンバには決してなれないからです。 @@ -25703,8 +33679,11 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +現在のユーザと環境のコンテキストにおいて、指定のテーブルに対して行単位セキュリティは有効か? @@ -25712,25 +33691,41 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
+ +アクセス権限のカタログ表現であるaclitem型で利用可能な演算子をに示します。 +アクセス権限値を解釈する方法に関する情報はをご覧ください。 + + <type>aclitem</type>演算子 + +演算子 + +説明 + +例 @@ -25745,10 +33740,15 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +aclitemは等しいか? +(aclitem型には通常の比較演算子の組がありません。等値だけです。 +同じようにaclitemの配列は等値比較だけが可能です。) 'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem @@ -25765,9 +33765,13 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +配列は指定した権限を含んでいるか? +(これはaclitemを与えられる側と与える側にマッチする配列のエントリを含んでいて、少なくとも指定した権限の集合を持つ場合に真となります。) '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem @@ -25781,7 +33785,10 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); boolean + +これは@>の廃止予定の別名です。 '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitem @@ -25793,20 +33800,32 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
+ +aclitem型を管理する追加の関数を示します。 + + <type>aclitem</type>関数 + +関数 + +説明 @@ -25823,6 +33842,7 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); aclitem[] + +ownerIdのOIDを持つロールに所属するtype型のオブジェクトのデフォルト権限を持つaclitem配列を作成します。 +これはオブジェクトのACL権限がNULLであるときに想定されるアクセス権限を示します。 +(デフォルトアクセス権限についてはで述べています。) +typeパラメータは以下のどれかでなければなりません。 +'c'でCOLUMN、'r'でTABLEおよびテーブルに見えるオブジェクト、's'でSEQUENCE、'd'でDATABASE、'f'でFUNCTIONあるいはPROCEDURE、'l'でLANGUAGE、'L'でLARGE OBJECT、'n'でSCHEMA、'p'でPARAMETER、't'でTABLESPACE、'F'でFOREIGN DATA WRAPPER、'S'でFOREIGN SERVER、'T'でTYPEあるいはDOMAINを表します。 @@ -25860,6 +33886,7 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); is_grantableboolean ) + +行の集合としてaclitem配列を返します。 +アクセス権を与えられる側が仮想ロールPUBLICなら、grantee列でgranteeはゼロで表現されます。 +各々の与えられた権限はSELECTINSERTなどで表現されます。(完全なリストはを参照してください)。 +各々の権限は別々の行に分解され、privilege_type列には一つのキーワードだけが現れることに注意してください。 @@ -25884,6 +33916,7 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); aclitem + +与えられた属性でaclitemを作成します。 +privilegesは、結果中に設定されるSELECTINSERTなどのカンマで区切られた権限名のリストです。 +(権限文字列の大文字小文字の区別は無視されます。権限文字の間に余分な空白が合っても構いませんが、権限文字列中に空白があってはいけません。) @@ -25900,9 +33937,13 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); + + スキーマ可視性問い合わせ関数 + +に、特定のオブジェクトが、現行スキーマの検索パスにおいて可視かどうかを判別する関数を示します。 +例えば、あるテーブルを含むスキーマが検索パス内に存在し、検索パス内の前方に同じ名前のテーブルがない場合、そのテーブルは可視であると言います。 +つまり、これは、テーブルが明示的なスキーマ修飾なしで名前によって参照可能であるということです。 +ですから全ての可視テーブルの名前を列挙するには以下のようにします。 SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); + +関数および演算子では、パスの前方に同じ名前かつ同じ引数のデータ型を持つオブジェクトが存在しなければ、検索パス内のオブジェクトは可視と言えます。 +演算子クラスと(演算子)族では、名前と関連するインデックスアクセスメソッドが考慮されます。 search path object visibility + + 検索パス + オブジェクトの可視性 +
+ + スキーマ可視性照会関数 + +関数 + +説明 @@ -25949,7 +34012,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +照合順序が検索パスにおいて可視か? @@ -25962,7 +34028,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +変換が検索パスにおいて可視か? @@ -25975,8 +34044,12 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +関数が検索パスにおいて可視か? +(これはプロシージャと集約にも使えます。) @@ -25989,7 +34062,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +演算子クラスが検索パスにおいて可視か? @@ -26002,7 +34078,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +演算子が検索パスにおいて可視か? @@ -26015,7 +34094,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +演算子族が検索パスにおいて可視か? @@ -26028,7 +34110,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +統計情報オブジェクトが検索パスにおいて可視か? @@ -26041,9 +34126,13 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +テーブルが検索パスにおいて可視か? +(これはビュー、マテリアライズドビュー、インデックス、シーケンス、外部テーブルを含むべての形式のリレーションで使用できます。) @@ -26056,7 +34145,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +テキスト検索設定が検索パスにおいて可視か? @@ -26069,7 +34161,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +テキスト検索辞書が検索パスにおいて可視か? @@ -26082,7 +34177,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +テキスト検索パーサが検索パスにおいて可視か? @@ -26095,7 +34193,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +テキスト検索テンプレートが検索パスにおいて可視か? @@ -26108,7 +34209,10 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); boolean + +型(またはドメイン)が検索パスにおいて可視か? @@ -26116,39 +34220,62 @@ SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
+ +これらの関数は全て、検査するオブジェクトを識別するために、オブジェクトのOIDを必要とします。 +オブジェクトを名前でテストする場合、OID別名型(regclassregtyperegprocedureregoperatorregconfig、またはregdictionary)を使用すると便利です。 +例えば、以下のようにします。 SELECT pg_type_is_visible('myschema.widget'::regtype); + +ただし、このようなやり方でスキーマ修飾されていない型名をテストしても、あまり意味がないことに注意してください。名前が認識されれば、それは必ず可視ということになります。
+ + システムカタログ情報関数 + +に、システムカタログから情報を抽出する関数を列挙します。 + + システムカタログ情報関数 + +関数 + +説明 @@ -26163,9 +34290,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +型OIDと型修飾子で決まるデータ型のSQL名を返します。 +型修飾子が不明な場合はNULLを型修飾子に渡してください。 @@ -26178,14 +34309,23 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); regtype + +型OIDで識別されるドメイン型の基本型のOIDを返します。 +引数がドメイン以外の型のOIDの場合、引数をそのまま返します。 +引数が有効な型OIDでない場合、NULLを返します。 +ドメイン依存の連鎖がある場合、基本型が見つかるまで再帰します。 + +CREATE DOMAIN mytext AS textと仮定します。 pg_basetype('mytext'::regtype) @@ -26202,9 +34342,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); integer + +指定されたエンコード名を、一部のシステムカタログテーブルで使用されている内部識別子を表す整数に変換します。 +不明なエンコード名が指定された場合は-1を返します。 @@ -26217,9 +34361,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); name + +システムカタログテーブル内のエンコーディングの内部識別子として使用されている整数を、読み取り可能な文字列に変換します。 +無効なエンコーディング番号が指定されている場合は、空の文字列を返します。 @@ -26238,6 +34386,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); is_optboolean ) + +PostgreSQLシステムカタログ中に存在する外部キー関係を記述するレコードの集合を返します。 +fktable列は参照するカタログの名前を示し、fkcols列は参照する列の名前を示します。 +同様に、pktableは参照されるカタログの名前を示し、pkcolsは参照される列の名前を示します。 +is_arrayが真なら、最後の参照列は配列で、各要素は参照カタログにマッチします。 +is_optが真なら、参照される列は有効な参照の代わりにゼロを含んでも構いません。 @@ -26264,9 +34419,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +制約を作成したコマンドを再構築します。 +(これは逆コンパイルで構成したもので、元のコマンドのテキストではありません。) @@ -26279,11 +34438,15 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +列のデフォルト値のような、システムカタログに格納された内部表現式を逆コンパイルします。 +式に変数が含まれている場合は2番目の引数として参照されているリレーションのOIDを指定してください。変数が含まれていない場合は、ゼロを渡しておけば十分です。 @@ -26296,11 +34459,16 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +関数あるいはプロシージャの作成コマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) +結果は完全なCREATE OR REPLACE FUNCTIONあるいはCREATE OR REPLACE PROCEDURE文です。 @@ -26313,9 +34481,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +CREATE FUNCTION中に現れる形で関数あるいはプロシージャの引数のリストを再構築します。 +(デフォルト値を含みます。) @@ -26328,9 +34500,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +ALTER FUNCTIONのようなコマンド中に現れる形で関数あるいはプロシージャの引数のリストを再構築します。 +この形式ではデフォルト値は省略します。 @@ -26343,9 +34519,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +CREATE FUNCTION中に現れる形で関数のRETURNS句を再構築します。 +プロシージャに対してNULLを返します。 @@ -26358,10 +34538,15 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +インデックスを作成するコマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) +columnが渡されていてゼロでないなら、その列の定義だけが再構築されます。 @@ -26379,6 +34564,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); baredesctext ) + +サーバが認識するSQLキーワードを記述するレコードの集合を返します。 +word列にはキーワードが含まれます。 +catcode列にはカテゴリコードが含まれます。Uは非予約キーワード、Cは列名になり得るキーワード、Tは型あるいは関数名になり得るキーワード、Rは完全な予約キーワードです。 +barelabel列は、キーワードがbare列ラベルとしてSELECTリスト中で使えるならtrueで、ASの後にのみ使えるのならfalseです。 +catdesc列にはキーワードカテゴリを記述する、ローカライズ化されることもある文字列が含まれます。 +baredesc列にはキーワードの列ラベル状態を記述する、ローカライズ化されることもある文字列が含まれます。 @@ -26407,11 +34600,15 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +パーティション化テーブルのパーティションキーの定義を、CREATE TABLEPARTITION BY句の形式で再構成します。(これは逆コンパイルされた再構成であり、コマンドのオリジナルテキストではありません。 +) @@ -26424,9 +34621,13 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +ルールを作成するコマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) @@ -26439,6 +34640,7 @@ SELECT pg_type_is_visible('myschema.widget'::regtype); text + +列に関連するシーケンスの名前を返します。 +列に関連するシーケンスが存在しなければ、NULLを返します。 +列が識別列の場合、関連するシーケンスは識別列に対して内部的に作成されたシーケンスとなります。 +SERIAL型(serialsmallserialbigserial)の一つを使って作られた列については、そのSERIAL列の定義に対して作られたシーケンスとなります。 +後者の場合、この関連付けはALTER SEQUENCE OWNED BYで修正または削除することができます。 +(この関数はおそらくpg_get_owned_sequenceと呼ばれるべきだったのでしょうが、現在の名前はそれが主にserial列またはbigserial列と一緒に使われていたという事実によります。) +最初の入力パラメータはテーブル名で、スキーマを付けることもできます。 +2番目のパラメータは列名です。 +最初のパラメータは普通はスキーマとテーブルですので、二重引用符付の識別子としては解釈されません。 +つまり、デフォルトで小文字に変換されます。 +一方2番目のパラメータは単なる列名であり、二重引用符付として解釈され、その大文字小文字は保持されます。 +この関数は、シーケンス関数(を参照)に渡すことができるよう適切な書式で値を返します。 + + + +典型的な使用法は識別列またはSERIAL列のシーケンスの現在値を読み取ることです。例を示します。 SELECT currval(pg_get_serial_sequence('sometable', 'id')); @@ -26478,9 +34696,13 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +拡張統計情報オブジェクトを作成するコマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) @@ -26493,9 +34715,13 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +トリガを作成するコマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) @@ -26508,7 +34734,10 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); name + +OIDで指定されるロール名を返します。 @@ -26521,9 +34750,13 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +ビューあるいはマテリアライズドビューの背後にあるSELECTコマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) @@ -26533,11 +34766,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +ビューあるいはマテリアライズドビューの背後にあるSELECTコマンドを再構築します。 +(これは逆コンパイルによる再構築で、元のコマンドのテキストではありません。) +この関数形式では整形するオプションは常に有効で、列数よりも短く保つように長い行は折り返されます。 @@ -26547,10 +34785,14 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +ビューあるいはマテリアライズドビューの背後にあるSELECTコマンドを再構築します。ビューのOIDではなく、テキスト形式の名前を使います。 +(これは廃止予定です。OIDのバージョンを使ってください。) @@ -26563,6 +34805,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); boolean + +インデックス列が名前付きのプロパティを持つかどうかを検査します。 +共通のインデックス列プロパティはに列挙されています。 +(拡張アクセスメソッドはインデックスに対して追加のプロパティ名を持てることに注意してください。) +プロパティ名が不明あるいは特定のオブジェクトに適用されない場合、OIDあるいは列番号が有効なオブジェクトを特定しない場合はNULLが返ります。 @@ -26583,6 +34831,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); boolean + +インデックスが名前付きのプロパティを持つかどうかを検査します。 +共通のインデックスプロパティはに列挙されています。 +(拡張アクセスメソッドはインデックスに対して追加のプロパティ名を持てることに注意してください。) +プロパティ名が不明あるいは特定のオブジェクトに適用されない場合、OIDが有効なオブジェクトを特定しない場合はNULLが返ります。 @@ -26603,12 +34857,17 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); boolean + +インデックスアクセスメソッドが名前付きのプロパティを持つかどうかを検査します。 +アクセスメソッドプロパティはに列挙されています。 +プロパティ名が不明あるいは特定のオブジェクトに適用されない場合、OIDが有効なオブジェクトを特定しない場合はNULLが返ります。 @@ -26623,9 +34882,12 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); option_valuetext ) + +pg_class.reloptionsあるいはpg_attribute.attoptionsの値で表現されるストレージオプションの集合を返します。 @@ -26638,11 +34900,17 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text[] + +指定されたGUCに関連付けられたフラグの配列を返します。 +存在しない場合はNULLを返します。 +GUCが存在しても表示するフラグがない場合、結果は空の配列になります。 +にリストされている最も有用なフラグのみが公開されます。 @@ -26655,12 +34923,17 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); setof oid + +指定したテーブル空間に格納されるオブジェクトを持つデータベースのOIDの集合を返します。 +この関数が何らかの行を返すならば、そのテーブル空間は空ではなく、削除できません。 +特定のオブジェクトがそのテーブル空間にあるかどうかを確認するには、pg_tablespace_databasesで識別されるデータベースに接続してpg_classカタログを検索する必要があります。 @@ -26673,7 +34946,10 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +テーブル空間が配置されているファイルシステムのパスを返します。 @@ -26686,12 +34962,17 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regtype + +渡された値のデータ型のOIDを返します。 +これはトラブル解決作業、または動的にSQL問い合わせを生成するのに便利です。 +この関数は、OIDの別名型であるregtypeを返すものとして宣言されます(を参照)。つまり、比較目的のOIDと同一ですが、型名として表示されます。 pg_typeof(33) @@ -26708,11 +34989,17 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +渡された値の照合順序の名前を返します。 +値は必要ならば引用符付きでスキーマ修飾されます。 +引数式から照合順序が生じなければ、NULLが返ります。 +引数が照合可能なデータ型でなければ、エラーが生じます。 collation for ('foo'::text) @@ -26733,11 +35020,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regclass + +テキスト形式のリレーション名をOIDに変換します。 +同様の結果はその文字列をregclass型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 @@ -26750,11 +35042,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regcollation + +テキスト形式の照合順名をOIDに変換します。 +同様の結果はその文字列をregcollation型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 @@ -26767,11 +35064,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regnamespace + +テキスト形式のスキーマ名をOIDに変換します。 +同様の結果はその文字列をregnamespace型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 @@ -26784,11 +35086,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regoper + +テキスト形式の演算子名をOIDに変換します。 +同様の結果はその文字列をregoper型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない、あるいは曖昧な場合にエラーを起こすのではなく、NULLを返します。 @@ -26801,11 +35108,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regoperator + +テキスト形式の演算子名(パラメータ型付き)をOIDに変換します。 +同様の結果はその文字列をregoperator型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 @@ -26818,11 +35130,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regproc + +テキスト形式の関数名またはプロシージャ名をOIDに変換します。 +同様の結果はその文字列をregproc型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない、あるいは曖昧な場合にエラーを起こすのではなく、NULLを返します。 @@ -26835,11 +35152,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regprocedure + +テキスト形式の関数名またはプロシージャ名(引数型付き)をOIDに変換します。 +同様の結果はその文字列をregprocedure型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 @@ -26852,11 +35174,16 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regrole + +テキスト形式のロール名をOIDに変換します。 +同様の結果はその文字列をregrole型にキャストすることによっても得られます。(参照。) +しかしこの関数は名前が見つからない場合にエラーを起こすのではなく、NULLを返します。 @@ -26869,6 +35196,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); regtype + +文字列を解析し、可能性のある型名を抽出し、その名前を型OIDに変換します。 +文字列の構文エラーはエラーになりますが、文字列がカタログにない構文的に有効な型名である場合、結果はNULLになります。 +文字列をregtype参照)にキャストすることで同様の結果が得られますが、名前が見つからない場合はエラーになります。 @@ -26889,18 +35221,27 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); integer + +テキスト文字列を構文解析し、可能性のある型名を抽出し、型修飾子があればそれを変換します。 +文字列内に構文エラーがあるとエラーになりますが、文字列がカタログにない構文的に有効な型名である場合は、結果はNULLになります。 +型修飾子が存在しない場合は、結果は-1です。 + +to_regtypemodと組み合わせて、に適切な入力を生成することができます。 +これにより、型名を表す文字列を正規化することができます。 format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)')) @@ -26912,6 +35253,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id'));
+ +データベースオブジェクトを再構築(逆コンパイル)する関数の多くにオプションのprettyフラグがあり、trueなら結果が整形されるようになっています。 +整形によって不必要な括弧が抑止され、見やすさのために空白は追加されます。 +整形形式は見やすいですが、デフォルト形式は将来のバージョンのPostgreSQLでも同じように解釈される可能性が高いです。 +ですから、整形された出力をダンプ目的で使わないでください。 +pretty引数にfalseを渡すとパラメータを省略したとの同じ結果が得られます。 + + インデックス列の属性 + + 名前説明 asc + + 前方スキャンで列は昇順にソートされるか? desc + + 前方スキャンで列は降順にソートされるか? nulls_first + + 前方スキャンで列はNULLを先頭にしてソートするか? nulls_last + + 前方スキャンで列はNULLを最後にしてソートするか? orderable + + 列は定義済みのソート順を所有しているか? distance_orderable + + 列は距離の演算子の順序に従ってスキャンできるか?例えばORDER BY col <-> 定数など returnable + + 列の値をインデックスオンリースキャンで返すことができるか? search_array + + 列はcol = ANY(array)の検索をネイティブにサポートしているか? search_nulls + + 列はIS NULLおよびIS NOT NULLの検索をサポートしているか? @@ -26985,32 +35366,50 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id'));
+ + インデックスの属性 + + 名前説明 clusterable + + インデックスをCLUSTERコマンドで使うことができるか? index_scan + + インデックスは通常の(ビットマップでない)スキャンをサポートしているか? bitmap_scan + + インデックスはビットマップスキャンをサポートしているか? backward_scan + + スキャンの途中でスキャン方向を変更できるか(マテリアライゼーションを必要とせずにカーソルの FETCH BACKWARDをサポートするため)? @@ -27018,39 +35417,60 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id'));
+ + インデックスアクセスメソッドの属性 + + 名前説明 can_order + + アクセスメソッドはCREATE INDEXにおいてASCDESCおよび関連するキーワードをサポートしているか? can_unique + + アクセスメソッドは一意インデックスをサポートしているか? can_multi_col + + アクセスメソッドは複数列にまたがるインデックスをサポートしているか? can_exclude + + アクセスメソッドは排他制約をサポートしているか? can_include + + アクセスメソッドがCREATE INDEXINCLUDE句をサポートしているか? @@ -27060,42 +35480,63 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); GUC Flags + + フラグ説明 EXPLAIN + + このフラグを持つパラメータはEXPLAIN (SETTINGS)コマンドに含まれます。 NO_SHOW_ALL + + このフラグを持つパラメータはSHOW ALLコマンドから除外されます。 NO_RESET + + このフラグを持つパラメータはRESETコマンドをサポートしません。 NO_RESET_ALL + + このフラグを持つパラメータはRESET ALLコマンドから除外されます。 NOT_IN_SAMPLE + + このフラグを持つパラメータはデフォルトではpostgresql.confに含まれません。 RUNTIME_COMPUTED + + このフラグを持つパラメータは実行時に計算されます。 @@ -27105,23 +35546,38 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); + + オブジェクトの情報とアドレス付関数 + +にデータベースオブジェクトの識別とアドレスに関連する関数を示します。
+ + オブジェクト情報とアドレスの関数 + +関数 + +説明 @@ -27136,9 +35592,13 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); aclitem[] + +カタログOID、オブジェクトOID、およびサブオブジェクトIDで指定されたデータベースオブジェクトのACLを返します。 +この関数は、未定義のオブジェクトに対してはNULL値を返します。 @@ -27151,6 +35611,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); text + +カタログOID、オブジェクトOID、もしくはサブオブジェクトOID(たとえばテーブル中の列番号。オブジェクト全体を参照している場合は0)で指定されたデータベースオブジェクトのテキストによる説明を返します。 +この説明はサーバの設定に依存しますが、人が読んでわかる、そして翻訳も可能になることを目的としたのもです。 +これはpg_dependカタログに格納されたオブジェクトの識別判断の際に有用です。 +この関数は、未定義オブジェクトに対してNULL値を返します。 @@ -27175,6 +35641,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); identitytext ) + +カタログOID、オブジェクトOID、そしてサブオブジェクトIDにより指定されるデータベースオブジェクトを一意に特定するために十分な情報を含む行を返します。 +この情報は機械による読み取りを目的としており、決して翻訳されません。 +typeはデータベースオブジェクトの型を識別するものです。 +schemaはオブジェクトが所属するスキーマの名前ですが、スキーマに所属しないオブジェクト型の場合はNULLになります。 +nameは(必要なら引用符で括った)オブジェクトの名前ですが、(適切ならスキーマ名と合わせて)オブジェクトの一意識別子として使用できる場合にのみ指定し、それ以外の場合はNULLにします。 +identityは完全なオブジェクトの識別で、オブジェクトの型に依存した正確なフォーマットを持っています。 +フォーマット内の各部分はスキーマ修飾されており、必要に応じて引用符で括られます。 +未定義オブジェクトはNULL値で識別されます。 @@ -27207,6 +35683,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); object_argstext[] ) + +カタログOID、オブジェクトOID、そしてサブオブジェクトIDにより指定されるデータベースオブジェクトを一意に特定するために充分な情報を含む行を返します。 +返される情報は現在のサーバに依存しません。 +つまり、他のサーバで全く同じ名前を付けられたオブジェクトを識別するために使うことができます。 +typeはデータベースオブジェクトの型を識別するものです。 +object_namesobject_argsは文字列の配列で、それらが組み合わされてオブジェクトへの参照を構成します。 +これらの3つの値は、オブジェクトの内部アドレスを取得するためにpg_get_object_addressに渡すことができます。 @@ -27235,6 +35719,7 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id')); objsubidinteger ) + +型、オブジェクト名および引数の配列で指定されたデータベースオブジェクトを一意に特定するために十分な情報を含む行を返します。 +返される値は、pg_dependなどのシステムカタログで使用されるもので、pg_identify_objectpg_describe_objectなど他のシステム関数に渡すことができます。 +classidはオブジェクトを含むシステムカタログのOIDです。 +objidはオブジェクト自体のOIDです。 +objsubidはオブジェクトのサブID、なければ0です。 +この関数はpg_identify_object_as_addressの逆関数です。 +未定義オブジェクトはNULL値で識別されます。 @@ -27256,10 +35749,14 @@ SELECT currval(pg_get_serial_sequence('sometable', 'id'));
+ +pg_get_aclは、特定のカタログを参照せずにデータベースオブジェクトに関連する権限を取得および検査するのに役立ちます。 +たとえば、現在のデータベース内のオブジェクトに付与されているすべての権限を取得するには次のようにします。 postgres=# SELECT (pg_identify_object(s.classid,s.objid,s.objsubid)).*, @@ -27284,30 +35781,50 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ + コメント情報関数 comment about database objects + + コメント + データベースオブジェクトについて + + +に示される関数は、コマンドによって以前に保存されたコメントを抽出します。 +指定されたパラメータに対するコメントが存在しない場合、NULL値が返されます。 + + コメント情報関数 + +関数 + +説明 @@ -27322,10 +35839,14 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +テーブルのOIDと列番号で指定されたテーブル列のコメントを返します。 +(obj_descriptionはテーブル列には使えません。列は自身のOIDを持たないからです。) @@ -27338,10 +35859,14 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +OIDとそれを含むシステム型で指定されるデータベースオブジェクトのコメントを返します。 +たとえばobj_description(123456, 'pg_class')はOID 123456のテーブルのコメントを返します。 @@ -27351,10 +35876,14 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +OIDだけで指定されるデータベースオブジェクトのコメントを返します。 +これは廃止予定です。異なるシステムカタログに渡ってOIDが一意であるという保証はないからです。ですから、間違ったコメントが返されるかも知れません。 @@ -27367,6 +35896,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +OIDとそれを含むシステム型で指定されるデータベース共有オブジェクトのコメントを返します。 +これは共有オブジェクト(すなわちデータベース、ロール、テーブル空間)のコメントを取り出すために使うのを除くとobj_descriptionと同じです。 +システムカタログによってはクラスタ内ですべてのデータベースに対して広域的で、その中のオブジェクトの説明も広域的に格納されています。 @@ -27383,26 +35917,44 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + データ有効性検証関数 + +で示した関数は、与えられた入力データの有効性をチェックするのに役立ちます。
+ + データ有効性検証関数 + +関数 + +説明 + +例 @@ -27420,15 +35972,22 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +指定された文字列が指定されたデータ型に対して有効な入力かどうかをテストし、真または偽を返します。 + +この関数は、データ型の入力関数が無効な入力をソフトエラーとして報告するように更新されている場合にのみ、機能します。 +そうでない場合、無効な入力は、文字列が直接その型にキャストされたかのように、トランザクションを中断します。 pg_input_is_valid('42', 'integer') @@ -27459,18 +36018,28 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} sql_error_code text ) + +指定された文字列が指定されたデータタイプに対して有効な入力かどうかをテストします。 +有効でない場合は、スローされたであろうエラーの詳細を結果します。 +入力が有効な場合、結果はNULLになります。 +入力はpg_input_is_validと同じです。 + +この関数は、データ型の入力関数が無効な入力をソフトエラーとして報告するように更新されている場合にのみ、機能します。 +そうでない場合、無効な入力は、文字列が直接その型にキャストされたかのように、トランザクションを中断します。 SELECT * FROM pg_input_error_info('42000000000', 'integer') @@ -27489,25 +36058,41 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + トランザクションIDとスナップショット情報関数 + +で示される関数はサーバトランザクション情報をエクスポートできる形式で提供します。 +これら関数の主な使用目的は2つのスナップショット間でどのトランザクションがコミットされたのかを特定するためです。
+ + トランザクションIDとスナップショット情報関数 + +関数 + +説明 @@ -27522,8 +36107,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} integer + +指定されたトランザクションIDと現在のトランザクションカウンタの間のトランザクション数を返します。 @@ -27536,8 +36124,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} integer + +指定されたマルチトランザクションIDと現在のマルチトランザクションカウンタの間のマルチトランザクションIDの数を返します。 @@ -27550,12 +36141,19 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} xid8 + +現在のトランザクションのIDを返します。 +現在トランザクションにIDがない場合(データベースの更新を実行していないため)、新しいIDが割り当てられます。 +詳細はを参照してください。 +サブトランザクションで実行された場合、トップ-レベルトランザクションIDが返却されます。 +詳細はを参照してください。 @@ -27568,12 +36166,17 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} xid8 + +現在のトランザクションIDを返します。もしまだ割り当てられていなければNULLを返します。 +(トランザクションが読み取り専用なら、無駄なXIDの消費を避けるためにこの関数を使うのが最良です。) +サブトランザクションで実行された場合、トップ-レベルトランザクションIDが返却されます。 @@ -27586,6 +36189,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +最近のトランザクションのコミット状態について報告します。 +トランザクションが最近のもので、システムがそのトランザクションのコミット状態を保持している場合は、トランザクションの状態はin progresscommittedあるいはabortedとして報告されます。 +トランザクションが古く、その参照がシステムに残っておらず、コミット状態の情報が破棄されている場合は、この関数はNULLを返します。 +COMMITの進行中にアプリケーションとデータベースが切断されたときに、アプリケーションはトランザクションがコミットされたか中断されたかを知るためにこれを使うことができます。 +プリペアドのトランザクションはin progressとして報告されること、そして指定のIDがプリペアドのトランザクションかどうかを確認する必要がある場合は、アプリケーションはpg_prepared_xactsを調べなければならないことに注意してください。 @@ -27615,11 +36225,16 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} pg_snapshot + +どのトランザクションIDがin-progressなのかを表示するデータ構造である現在のsnapshotを返します。 +スナップショットにはトップレベルのトランザクションIDだけが含まれます。 +サブトランザクションIDは表示されません。詳細はをご覧ください。 @@ -27632,7 +36247,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} setof xid8 + +スナップショットに含まれるin-progressのトランザクションIDの集合を返します。 @@ -27645,7 +36263,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} xid8 + +スナップショットのxmaxを返します。 @@ -27658,7 +36279,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} xid8 + +スナップショットのxminを返します。 @@ -27671,11 +36295,16 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +このスナップショットによると与えられたトランザクションIDが可視か(すなわちスナップショットが取得される前に完了していたか)? +この関数は副トランザクションID(subxid)に対しては正しい答えを返さないことに注意してください。 +詳細はを参照してください。 @@ -27690,6 +36319,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} modetext ) + +指定されたマルチトランザクションIDの各メンバのトランザクションIDとロックモードを返します。 +ロックモードforupdfornokeyupdsh、およびkeyshは、で説明されているように、それぞれ行レベルロックFOR UPDATEFOR NO KEY UPDATEFOR SHARE、およびFOR KEY SHAREに対応します。 +さらに2つのモードがマルチトランザクションに固有です。 +nokeyupdはキー列を変更しない更新で使用され、updはキー列を変更する更新または削除で使用されます。 @@ -27708,6 +36343,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ +内部トランザクションID型(xid)は32ビット幅なので40億トランザクション毎に周回します。 +とは言っても、に示される関数は、agemxid_agepg_get_multixact_membersを除き、インストールしてから稼働を終えるまでには周回しないxid8型の64ビット形式を使用しており、必要に応じてxidにキャストして変換できます。 +詳細はを参照してください。 +これらの関数で使用されるデータ型、pg_snapshotはある特定の時間におけるトランザクションIDの可視性に関する情報を格納します。 +構成要素はに記載されています。 +pg_snapshotのテキスト表現はxmin:xmax:xip_listです。 +たとえば10:20:10,14,15xmin=10, xmax=20, xip_list=10, 14, 15であることを意味します。 + + スナップショット構成要素 + + 名前 + + 説明 @@ -27739,30 +36392,43 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} xmin + +現在実行中で最も小さいトランザクションID。 +xminより小さい全てのトランザクションはコミットされて可視となっているか、またはロールバックされて消滅しています。 xmax + +完了した最も大きなトランザクションIDの一つ大きなID。 +xmaxと等しいかより大きい全てのトランザクションIDはスナップショットの時点で未完了であり、従って不可視です。 xip_list + +スナップショット時の実行中のトランザクションです。 +xmin <= X <xmaxで、このリストにないトランザクションIDはスナップショット時点ですでに完了しており、コミット状態によって可視あるいはデッドのどちらかです。 +リストには副トランザクションのトランザクションID(subxids)は含まれません。 @@ -27770,6 +36436,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ +PostgreSQLリリースの13より前ではxid8型がなく、これらの関数の変種は、64ビットのXIDを表現するためにbigintを、スナップショットデータ型に対応する別のtxid_snapshot型を使っていました。 +これらの古い関数ではtxidが名前に含まれています。 +過去互換性のためにこれらはまだサポートされていますが、将来のリリースでは削除されるかも知れません。 +を参照してください。 + + 廃止予定のトランザクションIDとスナップショット情報関数 + +関数 + +説明 @@ -27804,7 +36485,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} bigint + +pg_current_xact_id()参照。 @@ -27817,7 +36501,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} bigint + +pg_current_xact_id_if_assigned()参照。 @@ -27830,7 +36517,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} txid_snapshot + +pg_current_snapshot()参照。 @@ -27843,7 +36533,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} setof bigint + +pg_snapshot_xip()参照。 @@ -27856,7 +36549,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} bigint + +pg_snapshot_xmax()参照。 @@ -27869,7 +36565,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} bigint + +pg_snapshot_xmin()参照。 @@ -27882,7 +36581,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +pg_visible_in_snapshot()参照。 @@ -27895,7 +36597,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +pg_xact_status()参照。 @@ -27905,9 +36610,13 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + コミット済みトランザクション情報関数 + +に示す関数はいつ過去のトランザクションがコミットされたかの情報を提供します。 +設定オプションが有効のときにだけ、かつそれが有効になった後にコミットされたトランザクションについてのみ意味のある情報を提供します。 +コミット時刻情報は通常、バキューム時に削除されます。
+ + コミットされたトランザクションに関する情報関数 + +関数 + +説明 @@ -27941,7 +36663,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} timestamp with time zone + +トランザクションのコミットタイムスタンプを返します。 @@ -27956,7 +36681,10 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} roidentoid) + +トランザクションのコミットタイムスタンプとレプリケーション原点を返します。 @@ -27972,8 +36700,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} roidentoid ) + +直近にコミットしたトランザクションのトランザクションID、コミットタイムスタンプ、レプリケーション原点を返します。 @@ -27983,9 +36714,13 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + コントロールデータ関数 + +に示す関数は、カタログのバージョンなどといったinitdbの実行時に初期化される情報を表示します。 +それらはまた、先行書き込みログ(WAL)とチェックポイント処理についての情報も示します。 +この情報はクラスタ全体に渡るもので、どれか1つのデータベースに特有のものではありません。 +これらの関数はアプリケーションと同じ情報源から、ほぼ同じ情報を提供します。
+ + 制御データ関数 + +関数 + +説明 @@ -28019,8 +36768,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} record + +に示すように現在のチェックポイントの状態に関する情報を返します。 @@ -28033,8 +36785,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} record + +に示すように現在の制御ファイルの状態に関する情報を返します。 @@ -28047,8 +36802,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} record + +に示すようにクラスタの初期化状態に関する情報を返します。 @@ -28061,8 +36819,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} record + +に示すようにリカバリ状態に関する情報を返します。 @@ -28070,12 +36831,21 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ + <function>pg_control_checkpoint</function>の出力列 + + 列名 + + データ型 @@ -28176,12 +36946,21 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ + <function>pg_control_system</function>の出力列 + + 列名 + + データ型 @@ -28216,8 +36995,14 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + 列名 + + データ型 @@ -28288,12 +37073,21 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ + <function>pg_control_recovery</function>の出力列 + + 列名 + + データ型 @@ -28331,23 +37125,38 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + バージョン情報関数 + +に示す関数は、バージョン情報を出力します。
+ + バージョン情報関数 + +関数 + +説明 @@ -28362,6 +37171,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +PostgreSQLサーバのバージョンを説明する文字列を返します。 +情報はからも得られます。 +機械読み取り可能なバージョンはを使ってください。 +ソフトウェア開発者は文字列バージョンを解析するのではなく、server_version_num (8.2以降で利用可能)かを使うべきです。 @@ -28381,8 +37196,11 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +PostgreSQLが使用するUnicodeのバージョンを表す文字列を返します。 @@ -28394,9 +37212,13 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +サーバが ICU サポート付きで構築された場合はICUが使用するUnicodeのバージョンを表す文字列を返し、そうでない場合はNULLを返します。 + @@ -28405,24 +37227,40 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + WAL要約情報関数 + +に示す関数は、WAL要約の状態に関する情報を出力します。 +を参照してください。
+ + WAL要約情報関数 + +関数 + +説明 @@ -28440,6 +37278,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} end_lsnpg_lsn ) + +pg_wal/summariesの下にあるデータディレクトリ内のWAL要約ファイルに関する情報を返します。 +1行に1つのWAL要約ファイルを出力します。 +各ファイルは、指定されたLSN範囲内の指定されたTLIに関するWALを要約します。 +この関数は、開始LSNが既知の先行バックアップに基づいて増分バックアップを実行するために、サーバ上に十分なWAL要約があるかどうかを判断するのに役立つかもしれません。 @@ -28465,6 +37309,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} is_limit_blockboolean ) + +TLIで識別され、開始LSNと終了LSNの範囲の単一のWAL要約ファイルの内容に関する情報を返します。 +is_limit_blockが偽の場合の各行は、残りの出力列で識別されるブロックが、このファイルによって要約されたレコードの範囲内で少なくとも1つのWALレコードによって変更されたことを示します。 +is_limit_blockが真である各行は、(a) リレーションフォークがWALレコードの関連する範囲内でrelblocknumberで指定された長さに切り詰められたか、(b) リレーションフォークがWALレコードの関連する範囲内で作成または削除されたことを示します。 +この場合、relblocknumberは0になります。 @@ -28492,6 +37342,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} summarizer_pidint ) + +WAL要約処理の進捗に関する情報を返します。 +インスタンスが開始されてからWAL要約処理が一度も実行されていない場合、summarized_tlisummarized_lsnはそれぞれ00/0になります。それ以外の場合は、ディスクに書き込まれた最後のWAL要約ファイルのTLIと終了LSNになります。 +WAL要約処理が現在動作している場合、pending_lsnは消費した最後のレコードの終了LSNで、必ずsummarized_lsnの以上になり、WAL要約処理が動作していない場合、summarized_lsnと等しくなります。 +summarizer_pidはWAL要約処理が動作している場合はプロセスのPIDです。動作していない場合のPIDはNULLです。 + +特別な例外として、wal_level=minimalで生成されたWALで実行された場合、WAL要約処理はWALレベルファイルの生成を拒否します。これは、このような要約をインクリメンタルバックアップの基礎として使用するのは安全ではないためです。 +このケースでは、要約が生成されているかのように上記のフィールドが進み続けますが、ディスクには何も書き込まれません。 +wal_levelreplica以上に設定されている間に生成されたWALに要約処理が到達すると、ディスクへの要約の書き込みを再開します。 @@ -28526,15 +37387,24 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + システム管理関数 + +本節で説明する関数は、PostgreSQLインストレーションの制御と監視を行うために使用されます。 + + 構成設定関数 SET @@ -28549,25 +37419,45 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} of the server functions + + 設定 + サーバの + 関数 + + +は、実行時設定パラメータの問い合わせや変更に使用できる関数を示しています。
+ + 構成設定関数 + +関数 + +説明 + +例 @@ -28582,6 +37472,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +現在のsetting_nameの設定値を返します。 +そのような設定がなければ、missing_okが渡され、それがtrueでない限りcurrent_settingはエラーを引き起こします(この場合はNULLが返ります)。 +この関数はSQLコマンドのに関連します。 current_setting('datestyle') @@ -28608,6 +37503,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} text + +setting_nameパラメータにnew_valueを設定し、その値を返します。 +is_localが渡され、それがtrueなら新しい値は現在のトランザクションの間にのみ適用されます。 +現在のセッションで以降に新しい値を適用したければ、代わりにfalseとしてください。 +このコマンドはSQLコマンドのに関連します。 + +set_confignew_valueに対してNULL値を受け入れます。 +しかし、設定値をNULLにすることはできないため、設定をデフォルト値にリセットする要求として解釈されます。 set_config('log_statement_stats', 'off', false) @@ -28633,37 +37538,60 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} + + サーバシグナル送信関数 signal backend processes + + シグナル + バックエンドプロセス + + +に示す関数は、制御用シグナルを他のサーバプロセスに送信します。 +これらの関数の使用は、デフォルトでスーパーユーザのみに制限されていますが、注記された例外を除き、GRANTを使用して他のユーザにアクセスを許可できます。 + +これらのそれぞれの関数はシグナルの送付が成功の場合trueを返し、シグナルの送付に失敗したときにはfalseを返します。
+ + サーバシグナル送信関数 + +関数 + +説明 @@ -28678,6 +37606,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +指定したプロセスIDを持つバックエンドプロセスの現在のセッションの問い合わせを取り消します。 +呼び出し側のロールがキャンセルされるバックエンドのロールのメンバであるか、pg_signal_backendの権限を与えられている場合に実行できます。 +ただし、スーパーユーザのバックエンドはスーパーユーザのみが取り消せます。 +例外として、pg_signal_autovacuum_workerの権限を持つロールは、スーパーユーザのバックエンドともみなされる自動バキュームワーカープロセスをキャンセルすることが許可されています。 @@ -28699,6 +37633,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +指定プロセスIDのバックエンドのメモリコンテキストを記録することを要求します。 +この関数はバックエンドとロガー以外の外部プロセスに要求を送ることができます。 +メモリコンテキストはLOGメッセージレベルでログされます。 +ログは、ログ設定(詳細はを参照)に基づきサーバログに現れますが、に関わらずクライアントには送られません。 @@ -28720,6 +37660,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +PostgreSQLのすべてのサーバプロセスに構成ファイルの再読み込みをさせます。 +(これはSIGHUPシグナルをpostmasterプロセスに送ることによって始まり、postmasterは続いてSIGHUPを子に送ります。) +再ロードする前に、pg_file_settingspg_hba_file_rulespg_ident_file_mappingsビューを使用して、構成ファイルにエラーがないか確認することができます。 @@ -28741,9 +37686,13 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +ログファイルマネージャにシグナルを送って新しいファイルに直ちに切り替えさせます。 +これは組み込みのログ収集機構が実行中のみ動作します。でないとログマネージャサブプロセスが存在しないからです。 @@ -28756,6 +37705,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres} boolean + +バックエンドが指定したプロセスIDを持つセッションを終了させます。 +呼び出し側のロールが終了されるバックエンドのロールのメンバであるか、pg_signal_backendの権限を与えられている場合に実行できます。 +ただし、スーパーユーザのバックエンドはスーパーユーザのみが終了できます。 +例外として、pg_signal_autovacuum_workerの権限を持つロールは、スーパーユーザのバックエンドともみなされる自動バキュームワーカープロセスを終了させることが許可されています。 + +timeoutが与えられないか、ゼロなら、この関数はプロセスが実際に終了したかどうかに関わらず、この関数はシグナルの送付が成功したことのみを意味するtrueを返します。 +timeoutが指定され、ゼロよりも大きければ、この関数はプロセスが実際に終了するか、指定時間が経過するまで待ちます。 +プロセスが終了したら、この関数はtrueを返します。 +タイムアウトの場合は、警告が出力され、falseが返ります。 @@ -28783,6 +37744,7 @@ acl | {postgres=arwdDxtm/postgres,foo=r/postgres}
+ +pg_cancel_backendpg_terminate_backendは(それぞれ、SIGINTまたはSIGTERM)シグナルをプロセス識別子で特定されたバックエンドプロセスに送ります。 +使用中のバックエンドのプロセス識別子はpg_stat_activityビューのpid列から、もしくは、(UnixではpsWindowsではTask Managerにより)サーバ上のpostgresプロセスをリストすることで見つけられます。 +実行中のバックエンドのロールはpg_stat_activityusename列から確認することができます。 + +バックエンドプロセスのメモリコンテキストのログを取るためにpg_log_backend_memory_contextsを利用できます。 +例を示します。 postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid()); pg_log_backend_memory_contexts @@ -28807,7 +37777,10 @@ postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid()); t (1 row) + +各々のメモリコンテキストについて一つのメッセージがログされます。例を示します。 LOG: logging memory contexts of PID 10377 STATEMENT: SELECT pg_log_backend_memory_contexts(pg_backend_pid()); @@ -28823,45 +37796,72 @@ LOG: level: 2; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 LOG: level: 2; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used + +同じ親に100よりも多い子コンテキストがあると、最初の100子コンテキストがログされ、残りのコンテキストについてはサマリが付加されます。 +この関数を頻繁に呼び出すと、大きなオーバーヘッドを引き起こす可能性があることに注意してください。 +大量のログメッセージが生成される可能性があるからです。
+ + バックアップ制御関数 backup + + バックアップ + + +に示されている関数はオンラインバックアップの作成を支援します。 +これらの関数はリカバリ中には実行できません(pg_backup_startpg_backup_stoppg_wal_lsn_diffを除きます)。 + +これらの関数の正しい使用方法については、を参照してください。 + + バックアップ制御関数 + +関数 + +説明 @@ -28876,6 +37876,7 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 pg_lsn + +先行書き込みログ(WAL)中に後でリカバリターゲットとして使用できる名前付けされたマーカーレコードを作成し、関連する先行書き込みログ(WAL)の位置を返します。 +与えられた名前はリカバリをどこまで進めるかを指定するためにとともに利用できます。 +同じ名前で複数のリストアポイントを作成するのは避けてください。リカバリターゲットが一致した最初のところでリカバリが停止するからです。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -28899,7 +37907,10 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 pg_lsn + +先行書き込みログ(WAL)の現在のフラッシュ位置を取得します。(下の注釈を参照してください。) @@ -28912,7 +37923,10 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 pg_lsn + +現在の先行書き込みログ(WAL)の挿入位置を取得します。(下の注釈を参照してください。) @@ -28925,7 +37939,10 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 pg_lsn + +現在の先行書き込みログ(WAL)の書き込み位置を取得します。(下の注釈を参照してください。) @@ -28941,6 +37958,7 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 pg_lsn + +サーバがオンラインバックアップを開始するのを準備します。 +必須パラメータはユーザが任意に定義したバックアップラベルだけです。 +(通常、格納に使用するバックアップダンプファイルにちなんだ名前が付けられます。) +オプションの2番目のパラメータがtrueとして与えられると、pg_backup_startを可能な限り素早く実行することが指定されます。 +これによりI/O操作の急上昇をもたらして同時に実行中のすべての問い合わせを遅くする即時チェックポイントが強制されます。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -28970,14 +37997,20 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 spcmapfiletext ) + +オンラインバックアップの実行を終了します。 +バックアップラベルファイルとテーブル空間マップファイルの必要な内容は関数の結果の一部として返され、バックアップ領域内のファイルに書き込まれなければなりません。 +これらのファイルはライブデータディレクトリに書き込まれてはなりません(ライブデータディレクトリに書き込まれるとクラッシュ時にPostgreSQLの再起動に失敗します)。 + +オプションでboolean型パラメータがあります。 +falseの場合、この関数はバックアップの完了後、WALがアーカイブされるのを待たずに、即座に戻ります。 +この動作はWALのアーカイブを独立して監視するバックアップソフトウェアに対してのみ有用です。 +それ以外の場合、バックアップを一貫性のあるものにするために必要なWALが欠けるためにバックアップが役立たなくなるかもしれません。 +デフォルトあるいはこのパラメータがtrueのとき、アーカイブが有効なら、pg_backup_stopはWALがアーカイブされるまで待機します。 +(スタンバイでは、これはつまりarchive_mode = alwaysのときのみ待機するということです。 +プライマリでの書き込み活動が少ないときは、セグメントの変更を即座に起こさせるためにプライマリでpg_switch_walを実行するのが有効かもしれません。) + +プライマリで実行された場合、この関数はまた、先行書き込みログ(WAL)の格納領域にバックアップ履歴ファイルを作成します。 +履歴ファイルにはpg_backup_startで付与されたラベル、バックアップの先行書き込みログ(WAL)の位置の開始位置、終了位置、バックアップ開始時刻、終了時刻が含まれます。 +終了位置を記録した後、現在の先行書き込みログ(WAL)の挿入位置は自動的に、次の先行書き込みログ(WAL)ファイルに進みます。 +従って、終了先行書き込みログ(WAL)ファイルをすぐにアーカイブし、バックアップを完了させることができます。 + +この関数の結果は単一レコードです。 +lsn列はバックアップの終了先行書き込みログ(WAL)の位置です(これもまた無視可能です)。 +2番目の列はバックアップラベルファイルの内容を返し、3番目の列はテーブル空間マップファイルの内容を返します。 +これらはバックアップの一部として保存されなければならず、リストアプロセスの一部で必要となるものです。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -29026,6 +38082,7 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 pg_lsn + +サーバに対して新しい先行書き込みログ(WAL)ファイルへ強制スイッチを行い、それによってその現在のファイルがアーカイブされるようにします。 +(継続的アーカイブを利用中だと仮定します。) +結果は今ちょうど終了した先行書き込みログ(WAL)ファイル内の終了先行書き込みログ(WAL)ファイルの場所プラス1です。 +最後の先行書き込みログ(WAL)ファイルのスイッチ以降先行書き込みログ(WAL)ファイル活動がなければ、pg_switch_walは何もせず、現在使用中の先行書き込みログ(WAL)ファイルの先頭位置を返します。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -29050,8 +38115,11 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 text + +先行書き込みログ(WAL)ファイルの位置を、その位置を保持しているWALファイルの名前に変換します。 @@ -29066,8 +38134,11 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 file_offsetinteger ) + +先行書き込みログ(WAL)の位置を、その位置を保持しているWALファイルの名前とそのファイル内のバイトオフセットに変換します。 @@ -29082,8 +38153,11 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 timeline_idbigint ) + +WALファイル名からシーケンス番号とタイムラインIDを抽出します。 @@ -29096,11 +38170,15 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 numeric + +2つの先行書き込みログ(WAL)の位置のバイト単位の差分(lsn1 - lsn2)を計算します。 +これはpg_stat_replication内の関数でレプリケーションの遅延を取得するために使用することができます。 @@ -29108,6 +38186,7 @@ LOG: Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560
+ +pg_current_wal_lsnは、上記の関数で使用されるのと同じ書式で現在の先行書き込みログ(WAL)の書き込み位置を表示します。 +同様にpg_current_wal_insert_lsnは、現在の先行書き込みログ(WAL)の挿入位置を表示し、pg_current_wal_flush_lsnはトランザクションログの現在のフラッシュ位置を表示します。 +挿入位置は 論理的な任意の時点の先行書き込みログ(WAL)の終了位置です。 +一方、書き込み位置は、サーバの内部バッファから書き出された実際の終了位置、またフラッシュ位置は永続的ストレージへの書き込みが保証される位置です。 +書き込み位置はサーバ外部から検証可能なものの終端です。通常は、部分的に完了した先行書き込みログ(WAL)ファイルのアーカイブ処理を行いたい場合に必要とされるものです。 +挿入およびフラッシュ位置はサーバをデバッグする際に主に使用されます。 +これらはどちらも読み取りのみの操作であり、スーパーユーザ権限を必要としません。 + +pg_walfile_name_offsetを使用して、pg_lsn値から、対応する先行書き込みログ(WAL)ファイル名とバイトオフセットを取り出すことができます。 +以下に例を示します。 postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn); file_name | file_offset @@ -29136,12 +38227,18 @@ postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn); 00000001000000000000000D | 4039624 (1 row) + +同様に、pg_walfile_nameは先行書き込みログファイル名のみを抽出します。 + +pg_split_walfile_nameは、ファイルオフセットとWALファイル名からLSNを計算するのに有用です。例を示します。 postgres=# \set file_name '000000010000000100C000AB' postgres=# \set offset 256 @@ -29159,25 +38256,41 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
+ + リカバリ制御関数 + +に示される関数は、スタンバイサーバの現在のステータス情報を提供します。 +これらの関数はリカバリ中、および通常稼働時に実行することができるでしょう。 + + リカバリ情報関数 + +関数 + +説明 @@ -29192,7 +38305,10 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset boolean + +まだリカバリ実施中であれば真を返します。 @@ -29205,6 +38321,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset pg_lsn + +ストリーミングレプリケーションにより受信されディスクに同期書き込みされた、先行書き込みログ(WAL)の最後の位置を返します。 +ストリーミングレプリケーションがまだ実行中の場合、この関数の戻り値は単調に増加します。 +リカバリが完了した場合は、受信されディスクに書き込まれた最後のWALレコードの位置の値のまま変化しません。 +ストリーミングレプリケーションが無効、もしくは開始されていない場合、この関数はNULLを返します。 @@ -29224,12 +38346,18 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset pg_lsn + +リカバリ中に再生された最後の先行書き込みログ(WAL)の位置を返します。 +リカバリがまだ実行中の場合、この関数の戻り値は単調に増加します。 +リカバリが完了した場合は、リカバリ時に適用された最後のWALレコードの値のまま変化しません。 +サーバがリカバリ処理無しに正常に開始された場合、この関数はNULLを返します。 @@ -29242,6 +38370,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset timestamp with time zone + +リカバリ中に再生された最後のトランザクションのタイムスタンプを返します。 +このタイムスタンプは、プライマリにて該当するトランザクションがコミット、もしくはアボートされた際のWALレコードが生成された時刻です。 +リカバリ中に何のトランザクションも再生されていない場合、この関数はNULLを返します。 +リカバリがまだ実行中の場合、この関数の戻り値は単調に増加します。 +リカバリが完了している場合、この関数の戻り値はリカバリ中に再生した最後のトランザクションの時間のまま変化しません。 +サーバがリカバリ処理無しに正常に開始された場合、この関数はNULLを返します。 @@ -29266,10 +38402,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset rm_builtinboolean ) + +システムに現在ロードされているWALリソースマネージャを返します。 +列rm_builtinは、それが組み込みのリソースマネージャか、拡張によってロードされたカスタムリソースマネージャかを示します。 @@ -29277,21 +38417,34 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
+ +に示す関数は、リカバリの進行を制御する関数です。 +これらの関数はリカバリ中のみ実行することが可能です。 + + リカバリ制御関数 + +関数 + +説明 @@ -29306,7 +38459,10 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset boolean + +リカバリの中断が要求された場合は真を返します。 @@ -29319,11 +38475,17 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +リカバリの休止状態を返します。 +休止が要求されていないければ、戻り値はnot pausedです。 +休止が要求されていてリカバリがまだ休止していなければ、戻り値はpause requestedです。 +リカバリが実際に休止していれば、戻り値はpausedです。 @@ -29336,6 +38498,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset boolean + +スタンバイサーバをプライマリ状態に昇格します。 +waittrue(デフォルト)を設定すると、この関数は昇格が完了するか、wait_seconds秒が経過するまで待ち、昇格に成功すればtrue、さもなければfalseを返します。 +waitfalseを設定すると、この関数は昇格を起こすためにpostmasterにSIGUSR1を送信した後、直ちにtrueを返します。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -29362,6 +38532,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +リカバリの中断を要求します。 +要求しても、それは直ちにリカバリが中断することを意味しません。 +リカバリが実際に中断していることを保証したければ、 pg_get_wal_replay_pause_state()が返すリカバリ中断状態をチェックする必要があります。 +pg_is_wal_replay_paused()は要求が行われたかどうかを返すことに注意してください。 +リカバリが中断している間、データベースへの変更は適用されません。 +ホットスタンバイが動作中はすべての新しい問い合わせはデータベースの一貫した同じスナップショットを参照することになり、リカバリが再開するまでそれ以上の問い合わせの衝突は起きません。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -29387,11 +38568,17 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +リカバリが中断中なら再開します。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -29399,26 +38586,38 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
+ +pg_wal_replay_pausepg_wal_replay_resumeは昇格が進行中は実行できません。 +リカバリ中断中に昇格が引き起こされると中断状態は終了し、昇格が継続します。 + +ストリーミングレプリケーションが無効の場合、停止状態は特に問題なく永久に継続します。 +ストリーミングレプリケーションの進行中は、WALレコードの受信が継続され、停止時間、WALの生成速度、ディスクの残存容量によりますが、ディスク溢れが発生する可能性があります。
+ + スナップショット同期関数 + +PostgreSQLはデータベースのセッションに対して、それらのスナップショットを同期させることが可能です。 +スナップショットは、そのスナップショットを使用しているトランザクションにどのデータが可視かを決定します。 +同期スナップショットは、2つ以上のセッションにおいて、全く同じデータベース内容を見たい場合に必要となります。 +単に2つのセッションが独立してそれぞれのトランザクションを開始するだけでは、第3のトランザクションのコミットが、2つのトランザクションのSTART TRANSACTIONの狭間で実行され、そのため一方のトランザクションではそのコミット結果が見え、他方では見えないという可能性が常にあります。 + +このような問題を解決するため、PostgreSQLではトランザクションが使用しているスナップショットをエクスポートできるようになっています。エクスポートしたトランザクションが開かれ続けている限り、他のトランザクションがそれをインポートすることができ、 +そしてこれにより最初のトランザクションと正確に同じとなるデータベースの可視性を保証されます。ただし、これらの(スナップショットを共有している)トランザクションによって発生したデータベースへの変更は、コミットされていないトランザクションによる変更と同様に、(スナップショットを共有している)他のトランザクションには見えないままです。 +つまり、既存データに対しては同期されますが、それら自身による変更については通常の振る舞いをします。 + +スナップショットは、に示すpg_export_snapshot関数を用いてエクスポートされ、コマンドを用いてインポートされます。 + + スナップショット同期関数 + +関数 + +説明 @@ -29472,19 +38693,30 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +現在のトランザクションのスナップショットを保存し、それを識別するtext文字列を返します。 +この文字列は(データベースの外側で)スナップショットを取り込みたいクライアントに渡さなければなりません。 +エクスポートしたトランザクションが終わるまでの間のみ、そのスナップショットをインポートすることができます。 + +必要ならばトランザクションは複数のスナップショットをエクスポートできます。 +これはREAD COMMITTEDのトランザクションにおいてのみ有用であることに注意してください。 +REPEATABLE READおよびそれ以上の分離レベルのトランザクションでは終了まで同じスナップショットを使うからです。 +一旦スナップショットをエクスポートしたトランザクションでは、による準備を使用することができなくなります。 @@ -29496,10 +38728,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset pg_lsn + +bgwriterやcheckpointerがログするのを待たずに、実行中のトランザクションのスナップショットを取得し、それをWALに書き込みます。 +これは、ロジカルデコーディングのスタンバイに対して便利です。ロジカルのスロットの作成は、このようなレコードがスタンバイで再生されるまで待たなければならないからです。 @@ -29509,9 +38745,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset + + レプリケーション管理関数 + +に示す関数はレプリケーション機能を制御したり、情報を取得したりするためのものです。 +基盤となっている機能の情報に関してはを参照してください。 +これらの関数のレプリケーションオリジンでの使用はデフォルトでスーパーユーザにのみ許可されていますが、GRANTコマンドを使って他のユーザに許可することもできます。 +これらの関数のレプリケーションスロットでの使用はスーパーユーザとREPLICATION権限を持つユーザに限定されています。 + +これらの関数の多くには、レプリケーションプロトコルに等価なコマンドがあります。 +を参照してください。 + +に書かれている関数もレプリケーションに関係するものです。
+ + レプリケーション管理関数 + +関数 + +説明 @@ -29565,6 +38826,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset lsnpg_lsn ) + +slot_nameという名前の新しい物理レプリケーションスロットを作成します。 +2番目のパラメータはオプションで、trueの場合、このレプリケーションスロットのLSNが即座に予約されることを指定します。 +それ以外の場合はLSNはストリーミングレプリケーションのクライアントから最初に接続された時に予約されます。 +物理スロットからのストリーミングの変更はストリーミングレプリケーションプロトコルでのみ可能です。を参照してください。 +3番目のパラメータtemporaryはオプションで、trueに設定されるとそのスロットは永続的にディスクに保存されるものではなく、現在のセッションによってのみ用いられることを意図していることを指定します。 +一時的なスロットはエラーが発生したときも解放されます。 +この関数の呼び出しは、レプリケーションプロトコルコマンドCREATE_REPLICATION_SLOT ... PHYSICALと同じ効果があります。 @@ -29591,9 +38861,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +slot_nameで指定した名前の物理的または論理レプリケーションスロットを削除します。 +レプリケーションプロトコルコマンドDROP_REPLICATION_SLOTと同様です。 @@ -29608,6 +38882,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset lsnpg_lsn ) + +出力プラグインpluginを使ってslot_nameという名前の新しい論理(デコーディング)レプリケーションスロットを作ります。 +3番目のオプションパラメータtemporaryをtrueに設定すると、このスロットを永続的にディスクに保存するべきではなく、現在のセッションでのみ使われることを意図します。 +また、一時スロットはエラーが起きると解放されます。 +オプションの4つ目の引数twophaseがtrueならば、準備されたトランザクションのデコードがこのスロットで可能になります。 +オプションの5番目の引数failoverがtrueならば、このスロットがスタンバイに同期化できるようになり、フェイルオーバー後に論理レプリケーションを再開できるようになります。 +この関数の呼び出しはレプリケーションプロトコルコマンドのCREATE_REPLICATION_SLOT ... LOGICALと同じ効果があります。 @@ -29638,6 +38920,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset lsnpg_lsn ) + +src_slot_nameという名前の既存の物理レプリケーションスロットをdst_slot_nameという名前の物理レプリケーションスロットにコピーします。 +コピーされた物理スロットはソーススロットと同じLSNからWALの保存を開始します。 +temporaryはオプションです。 +temporaryを省略すると、ソーススロットと同じ値を使用します。 +無効化されたスロットのコピーは許可されません。 @@ -29659,6 +38948,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset lsnpg_lsn ) + +src_slot_nameという名前の既存の論理レプリケーションスロットをdst_slot_nameという名前の論理レプリケーションスロットにコピーします。オプションで出力プラグインと永続性を変更します。 +コピーされた論理スロットはソース論理スロットと同じLSNから開始します。 +temporarypluginはどちらもオプションです。 +省略するとソース論理スロットと同じ値が使用されます。 +ソース論理スロットのfailoverオプションはコピーされず、デフォルトでfalseに設定されます。 +これは、スロットが同期中のスタンバイにフェイルオーバーした後、論理レプリケーションを継続できないリスクを回避するためです。 +無効になったスロットのコピーは許可されません。 @@ -29686,6 +38984,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset datatext ) + +変更が最後に消費された時点から開始して、スロットslot_nameの変更を返します。 +upto_lsnupto_nchangesがNULLならばロジカルデコーディングはWALの最後まで続きます。 +upto_lsnが非NULLであれば、デコードは指定されたLSNより前にコミットされたトランザクションのみを含みます。 +upto_nchangesが非NULLであれば、デコードにより生成された行の数が指定された値を越えたときに、デコードは止まります。 +しかしながら、新しいトランザクションの各コミットをデコードして生成された行を追加した後でしかこの制限は確認されませんので、実際に返される行の数は大きいかもしれないことに注意してください。 +指定されたスロットがロジカルフェイルオーバースロットである場合、関数はsynchronized_standby_slotsで指定された全ての物理的スロットがWAL受信を確認するまで結果しません。 @@ -29717,10 +39023,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset datatext ) + +変更が消費されないということを除いて、pg_logical_slot_get_changes()関数と同じように振る舞います。すなわち、将来の呼び出しでは再び同じものが返ります。 @@ -29736,9 +39045,12 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset databytea ) + +変更はbyteaとして返されるということを除いてpg_logical_slot_get_changes()関数と同じように振る舞います。 @@ -29754,9 +39066,12 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset databytea ) + +変更はbyteaとして返されることを除いてpg_logical_slot_peek_changes()関数と同じように振る舞います。 @@ -29771,6 +39086,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset end_lsnpg_lsn ) + +slot_nameという名前のレプリケーションスロットの現在の確認された位置を進めます。 +スロットは後方には動きませんし、現在の挿入位置を超えて進むこともありません。 +スロットの名前と前に進んだ実際の位置を返します。 +前に進んだ場合は更新されたスロットに関する情報がこの後のチェックポイントで書き出されます。 +クラッシュが発生すると、そのスロットは以前の位置に戻るかもしれません。 +指定されたスロットがロジカルフェイルオーバースロットである場合、関数はsynchronized_standby_slotsで指定された全ての物理的スロットがWAL受信を確認するまで結果を返しません。 @@ -29794,9 +39117,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset oid + +指定した外部名でレプリケーション起点を作成し、割り当てられた内部IDを返します。 +名前は512バイト以下である必要があります。 @@ -29809,8 +39136,11 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +以前に作成されたレプリケーション起点を、それに関連するすべての再生の進捗も含めて削除します。 @@ -29823,9 +39153,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset oid + +レプリケーション起点を名前で検索し、内部IDを返します。 +相当するレプリケーション起点が見つからない場合はNULLを返します。 @@ -29838,10 +39172,15 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +現在のセッションに、指定の起点から再生中であると印を付け、再生の進捗が追跡できるようにします。 +起点が選択されていない場合にのみ使うことができます。 +元に戻すにはpg_replication_origin_session_resetを使って下さい。 @@ -29854,8 +39193,11 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +pg_replication_origin_session_setup()の効果を取り消します。 @@ -29868,8 +39210,11 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset boolean + +現在のセッションでレプリケーション起点が選択されていれば真を返します。 @@ -29882,10 +39227,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset pg_lsn + +現在のセッションで設定されたレプリケーション起点の再生位置を返します。 +パラメータflushにより、対応するローカルトランザクションがディスクにフラッシュされていることが保証されるかどうかを決定します。 @@ -29898,10 +39247,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +現在のトランザクションに、指定のLSNおよびタイムスタンプでコミットしたトランザクションを再生中であると印をつけます。 +事前にレプリケーション起点がpg_replication_origin_session_setupを使って選択されている場合にのみ呼び出せます。 @@ -29914,8 +39267,11 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +pg_replication_origin_xact_setup()の効果を取り消します。 @@ -29928,11 +39284,16 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +指定したノードのレプリケーションの進捗を、指定の位置に設定します。 +これは主に設定変更の後で初期位置や新しい位置を設定するときなどに役立ちます。 +この関数を不注意に使うと、レプリケーションデータが一貫性を失うかもしれないことに注意して下さい。 @@ -29945,10 +39306,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset pg_lsn + +指定したレプリケーション起点の再生位置を返します。 +パラメータflushにより、対応するローカルトランザクションがディスクにフラッシュされていることが保証されるかどうかを決定します。 @@ -29965,6 +39330,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset pg_lsn + +ロジカルデコーディングのメッセージを送出します +これは汎用的なメッセージをWALを通してロジカルデコーディングのプラグインに渡すのに使うことができます。 +パラメータtransactionalは、メッセージが現在のトランザクションの一部なのか、あるいはすぐに書き込み、ロジカルデコーディングがレコードを読んだらすぐにデコードされるべきものなのかを指定します。 +prefixパラメータは文字通りの接頭辞で、ロジカルデコーディングのプラグインが、自分にとって関心のあるメッセージを容易に認識できるように使われます。 +contentパラメータはメッセージの内容で、テキストまたはバイナリ形式で与えられます。 +flush(デフォルトはfalse)は、メッセージを即座にWALに吐き出すかどうかを制御します。 +flushtransactionalでは効果がありません。メッセージのWALレコードはトランザクションと共に吐き出されるからです。 @@ -29992,6 +39366,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset void + +プライマリサーバからスタンバイサーバへの論理フェイルオーバーレプリケーションスロットを同期します。 +この機能は、スタンバイサーバでのみ実行できます。 +一時的に同期されたスロットは、ロジカルデコーディングに使用できず、昇格後に破棄する必要があります。 +詳細はを参照してください。 +この関数は主にテストおよびデバッグを目的としているため、注意深く使用する必要があることに注意してください。 +また、sync_replication_slotsが有効で、スロットの同期を実行するためにスロット同期ワーカーがすでに実行中の場合、この関数は実行できないことに注意してください。 + +関数の実行後に、スタンバイ側でhot_standby_feedbackが無効になったり、primary_slot_nameに設定された物理スロットが削除されたりすると、同期スロットの必要な行がプライマリサーバのVACUUM処理によって削除され、同期スロットが無効になる可能性があります。 @@ -30028,27 +39413,44 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset + + データベースオブジェクト管理関数 + +で示された関数はデータベースオブジェクトのディスク領域の使用状況を計算したり、使用結果の表示あるいは理解を補助します。 +bigintの結果はバイト単位の大きさです。 +関数に存在するオブジェクト以外のOIDが渡されるとNULLが返ります。
+ + データベースオブジェクトサイズ関数 + +関数 + +説明 @@ -30063,9 +39465,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset integer + +個々のデータ値を格納するのに使用されるバイト数を表示します。 +テーブルの列の値に直接適用すると、圧縮が行われていればそれを反映します。 @@ -30078,9 +39484,13 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +個々の可変長値で使われた圧縮アルゴリズムを表示します。 +値が圧縮されていなければ、NULLを返します。 @@ -30093,11 +39503,16 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset oid + +ディスク上のTOAST化された値のchunk_idを表示します。 +値が非TOAST化されていたり、あるいはディスク上にない場合はNULLを返します。 +TOASTについてのより詳しい情報はを参照してください。 @@ -30114,11 +39529,15 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +名前あるいはOIDで指定したデータベースによって使われている全ディスクスペースを計算します。 +この関数を使うには、指定したデータベースにCONNECT権限(デフォルトで付与されています)を持っているか、pg_read_all_statsロールの権限を持っていなければいけません。 @@ -30131,8 +39550,11 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +指定したテーブルに付与されたインデックスで使用されている全ディスクスペースを計算します。 @@ -30145,6 +39567,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +指定したリレーションの一つのforkで使用されているディスクスペースを計算します。 +(大抵の目的には、すべてのフォークのサイズを合計する高レベルのpg_total_relation_sizeあるいはpg_table_sizeを使う方が便利です。) +引数1つではリレーションの主データフォークのサイズを返します。 +2番目の引数で対象となるのがどのフォークであるかを指定できます。 + +mainはリレーションの主データフォークのサイズを返します。 + +fsmを指定すると、リレーションに関連した空き領域マップ(を参照)のサイズを返します。 + +vmを指定すると、リレーションに関連した可視性マップ(を参照)のサイズを返します。 + +initを指定すると、あれば、リレーションに関連した初期化フォークのサイズを返します。 @@ -30191,11 +39631,15 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +(pg_size_prettyが返す)人間が読めるフォーマットのサイズをバイトに変換します。 +有効な値は、bytesBkBMBGBTBPBです。 @@ -30212,10 +39656,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +バイトサイズを、サイズ単位(バイト、kB、MB、GB、TB、PBのうちの適切なもの)を使った、より人間が読みやすい形式に変換します。 +単位は10のべき乗ではなく、2のべき乗であることに注意してください。ですから1kBは1024バイトで、1MBは10242 = 1048576バイト、などとなります。 @@ -30228,9 +39676,12 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +指定テーブルが使用している、インデックスを含まないディスクスペースを計算します。(ただしあればTOASTテーブル、空き領域マップ、可視性マップを含みます。) @@ -30247,11 +39698,15 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +名前あるいはOIDで指定されたテーブル空間で使用されているディスクスペースを計算します。 +現在のデータベースのデフォルトテーブル空間でない限り、この関数を使うには、指定したテーブル空間にCREATE権限を持っているか、pg_read_all_statsロールの権限を持っていなければいけません。 @@ -30264,10 +39719,14 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset bigint + +指定テーブルが使用している、インデックスとTOASTデータを含む全ディスクスペースを計算します。 +結果はpg_table_size + pg_indexes_sizeと等価です。 @@ -30275,29 +39734,46 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
+ +上記の関数において、テーブルやインデックスをregclass引数として受け取って処理するものがありますが、この引数は単にpg_classシステムカタログにあるテーブルやインデックスのOIDです。 +ただし、regclassデータ型が自動で入力変換を行うため、ユーザが手動で該当するOIDを調べる必要はありません。 +詳細はを参照してください。 + + に示される関数は、データベースオブジェクトに関連する特定のディスクファイルを確認する際の手助けとなります。 + + データベースオブジェクト位置関数 + +関数 + +説明 @@ -30312,6 +39788,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset oid + +指定されたリレーションに現在割り当てられているファイルノード番号を返します。 +ファイルノードは、リレーションに使用しているファイル名の基本要素です。(詳しくはを参照して下さい。) +ほとんどのリレーションについては、結果はpg_class.relfilenodeと同じになります。ただし、いくつかのシステムカタログではrelfilenodeがゼロになるため、これらのシステムカタログの正しいファイルノードを取得するには、この関数を使用しなければなりません。 +この関数は、ビューの様にストレージに格納されないリレーションが指定された場合はNULLを返します。 @@ -30334,8 +39816,11 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +リレーションのファイルパス名全体(データベースクラスタのデータディレクトリ、PGDATAからの相対)を返します。 @@ -30348,6 +39833,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset regclass + +与えられたテーブル空間OIDとファイルノードに格納されているリレーションのOIDを返します。 +これは本質的にpg_relation_filepathの逆マッピングです。 +データベースのデフォルトテーブル空間内のテーブルに対しては、テーブル空間は0と指定できます。 +指定された値に対応する現在のデータベースにリレーションがない、または一時的なリレーションとして扱われている場合はNULLを返します。 @@ -30362,20 +39853,32 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
+ +に照合順序の管理に使用される関数の一覧を示します。 + + 照合順序管理関数 + +関数 + +説明 @@ -30390,12 +39893,17 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +オペレーティングシステムに現在インストールされている照合順序オブジェクトの実際のバージョンを返します。 +これがpg_collation.collversionと異なると、その照合順序に依存しているオブジェクトは再構築の必要があるかも知れません。 +も参照してください。 @@ -30408,12 +39916,17 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset text + +オペレーティングシステムに現在インストールされている照合順序オブジェクトの実際のバージョンを返します。 +これがpg_database.datcollversionと異なると、その照合順序に依存しているオブジェクトは再構築の必要があるかも知れません。 +も参照してください。 @@ -30426,6 +39939,7 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset integer + +オペレーティングシステム上にあるすべてのロケールに基づき、システムカタログpg_collationに照合順序を追加します。 +これはinitdbが使用しているもので、より詳細についてはを参照してください。 +その後にオペレーティングシステムに追加のロケールをインストールした場合、この関数を再度実行して、その新しいロケールの照合順序を追加することができます。 +pg_collationの既存のエントリにマッチするロケールはスキップされます。 +(しかし、オペレーティングシステム上にもはや存在しなくなったロケールに基づく照合順序オブジェクトはこの関数では削除されません。) +schemaパラメータは通常はpg_catalogですが、必ずしもそうでなければならないわけではなく、照合順序をどれか他のスキーマにインストールすることもできます。 +この関数は新しく作成された照合順序オブジェクトの数を返します。 +この関数の利用はスーパーユーザにのみ限定されています。 @@ -30449,29 +39972,45 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset
+ +に統計情報の操作に使用される関数の一覧を示します。 +これらの関数はリカバリ中には実行できません。 + +これらの統計情報操作関数による変更は、autovacuum(または手動のVACUUMまたはANALYZE)によって上書きされる可能性があるため、一時的なものとみなすべきでしょう。 + + データベースオブジェクト統計情報操作関数 + +関数 + +説明 @@ -30487,17 +40026,25 @@ postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset boolean + +テーブルレベルの統計情報を更新します。 +通常、これらの統計情報は自動的に収集されるか、またはの一部として更新されるため、この関数を呼び出す必要はありません。 +ただし、リストア後にANALYZEがまだ実行されていない場合に、オプティマイザがより適切な計画を選択できるようにするために有用です。 + +追跡される統計情報はバージョンごとに変わる可能性があるため、引数はargnameargvalueのペアとして次の形式で渡されます。 SELECT pg_restore_relation_stats( 'arg1name', 'arg1value'::arg1type, @@ -30506,9 +40053,12 @@ SELECT pg_restore_relation_stats( + +例えば、テーブルmytablerelpagesおよびreltuplesの値を設定するには次のようにします。 SELECT pg_restore_relation_stats( 'schemaname', 'myschema', @@ -30518,6 +40068,7 @@ SELECT pg_restore_relation_stats( + +引数schemanamerelnameは必須であり、テーブルを指定します。 +その他の引数は、pg_classの列に対応する統計情報の名前と値です。 +現在サポートされているリレーション統計情報は、integer型の値を持つrelpagesreal型の値を持つreltuplesinteger型の値を持つrelallvisible、およびinteger型の値を持つrelallfrozenです。 + +さらに、この関数は、統計情報取得元のサーババージョンを指定するinteger型の引数名versionを受け入れます。 +これは、古いバージョンのPostgreSQLから統計情報を引き継ぐ際に役立つことが期待されています。 + +軽微なエラーはWARNINGとして報告されて無視され、残りの統計情報を引き続き復元します。 +指定されたすべての統計情報が正常に復元された場合はtrueを返し、それ以外の場合はfalseを返します。 + +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -30560,12 +40126,18 @@ SELECT pg_restore_relation_stats( void + +テーブルが新しく作成されたかのように、指定されたリレーションに対するテーブルレベルの統計情報を空にします。 + +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -30580,17 +40152,25 @@ SELECT pg_restore_relation_stats( boolean + +列レベルの統計情報を作成または更新します。 +通常、これらの統計情報は自動的に収集されるか、またはの一部として更新されるため、この関数を呼び出す必要はありません。 +ただし、リストア後にANALYZEがまだ実行されていない場合に、オプティマイザがより適切な計画を選択できるようにするために有用です。 + +追跡される統計情報はバージョンごとに変わる可能性があるため、引数はargnameargvalueのペアとして次の形式で渡されます。 SELECT pg_restore_attribute_stats( 'arg1name', 'arg1value'::arg1type, @@ -30599,10 +40179,13 @@ SELECT pg_restore_attribute_stats( + +たとえば、テーブルmytableの属性col1avg_widthおよびnull_fracの値を設定するには、次のようにします。 SELECT pg_restore_attribute_stats( 'schemaname', 'myschema', @@ -30614,6 +40197,7 @@ SELECT pg_restore_attribute_stats( + +必要な引数は、テーブルを指定するtext型の値を持つschemanamerelname、列を指定するtext型の値を持つattnameまたはsmallint型の値を持つattnum、および統計情報に子テーブルの値を含めるかどうかを指定するinheritedです。 +その他の引数は、pg_statsの列に対応する統計情報の名前と値です。 + +さらに、この関数は、統計情報取得元のサーババージョンを指定するinteger型の引数名versionを受け入れます。 +これは、古いバージョンのPostgreSQLから統計情報を移植する際に役立つことが期待されています。 + +軽微なエラーはWARNINGとして報告されて無視され、残りの統計情報を引き続き復元します。 +指定されたすべての統計情報が正常に復元された場合はtrueを返し、それ以外の場合はfalseを返します。 + +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -30658,12 +40256,18 @@ SELECT pg_restore_attribute_stats( void + +テーブルが新しく作成されたかのように、指定されたリレーションと属性に対する列レベルの統計情報を空にします。 + +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -30672,20 +40276,32 @@ SELECT pg_restore_attribute_stats(
+ +にパーティション化テーブルの構造に関する情報を提供する関数を示します。 + + パーティション情報関数 + +関数 + +説明 @@ -30704,6 +40320,7 @@ SELECT pg_restore_attribute_stats( levelinteger ) + +1行1パーティションで与えられたパーティション化テーブルあるいはパーティション化インデックスのパーティションツリー内のテーブルあるいはインデックスの情報を表示します。 +提供される情報にはパーティションOID、その直接の親のOID、パーティションが葉かどうかを示す真偽値、階層内のレベルを表す整数が含まれます。 +レベル値は与えられたテーブルあるいはインデックスがパーティションツリーの根としての役割を持つことを表す0で始まり、1ならその直下のパーティション、2ならそのまた下のパーティションなどとなります。 +リレーションが存在しない、あるいはパーティションでない、もしくはパーティション化テーブルでない場合は行を返しません。 @@ -30725,9 +40347,13 @@ SELECT pg_restore_attribute_stats( setof regclass + +パーティション自身を含む、与えられたパーティションの先祖リレーションを列挙します。 +リレーションが存在しない、あるいはパーティションでない、もしくはパーティション化テーブルでない場合は行を返しません。 @@ -30740,9 +40366,13 @@ SELECT pg_restore_attribute_stats( regclass + +与えられたリレーションが所属するパーティションツリーの最上位の親を返します。 +リレーションが存在しない、あるいはパーティションでない、もしくはパーティション化テーブルでない場合はNULLを返します。 @@ -30750,9 +40380,12 @@ SELECT pg_restore_attribute_stats(
+ +たとえばパーティション化テーブルmeasurementに含まれるデータの全体サイズを確認するには、次の問い合わせが利用できます。 SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size FROM pg_partition_tree('measurement'); @@ -30762,9 +40395,13 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size
+ + インデックス保守関数 + +にインデックスの保守タスクに使用可能な関数を示します。 +(これらの保守業務は通常自動バキュームが自動的に行うことに注意してください。これらの関数は特別な場合にのみ必要になります。) +これらの関数はリカバリ中は実行できません。 +これらの関数の使用はスーパーユーザと対象のインデックスの所有者に限定されます。 + + インデックス保守関数 + +関数 + +説明 @@ -30798,11 +40449,16 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size integer + +指定されたBRINインデックスを検査してベーステーブル内のインデックスによって現在要約されていないページ範囲を探します。 +そのような範囲があれば、テーブルのページをスキャンして新しい要約インデックスタプルを作成します。 +インデックスに挿入された新しいページ範囲要約の数を返します。 @@ -30815,10 +40471,14 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size integer + +指定のブロックを含むページ範囲が、まだ要約されていなければ、要約します。 +これはbrin_summarize_new_valuesと似ていますが、指定されたテーブルブロック番号のみを対象としてページ範囲を処理するところだけが異なります。 @@ -30831,8 +40491,11 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size void + +指定のテーブルブロックを含むページ範囲を要約するBRINインデックスタプルが存在する場合、それを削除します。 @@ -30845,6 +40508,7 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size bigint + +指定GINインデックスの処理待ちリストのエントリをメインのインデックスデータ構造に一括で移動します。 +処理待ちリストから削除されたページ数を返します。 +fastupdateオプションが無効で作成されたGINインデックスが引数なら、削除は起こらず結果がゼロになります。そのインデックスには処理待ちリストがないからです。 +処理待ちリストとfastupdateオプションの詳細についてはをご覧ください。 @@ -30863,9 +40532,13 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size + + 汎用ファイルアクセス関数 + +で示されている関数はサーバをホスティングしているマシン上のファイルに対し、ネイティブのアクセスを提供します。 +ユーザがスーパーユーザか、pg_read_server_filesロールを与えられていない限り、データベースクラスタディレクトリとlog_directoryに存在するファイルのみがアクセス可能です。 +クラスタディレクトリ内のファイルに対して相対パスを、そしてログファイルに対してはlog_directory構成設定に一致するパスを使用してください。 + +ユーザに対してEXECUTE権限をpg_read_file()あるいは関連する関数に与えることは、サーバの上データベースサーバプロセスが読めるすべてのファイルを読めるようにすることになることに注意してください。これらの関数はデータベース内のすべての権限チェックをすり抜けます。 +このことは、たとえばそのようなアクセス権を持つユーザは、認証情報が格納されたpg_authidテーブルの中身を読むことができますし、同様にデータベース内のすべてのテーブルデータを読むことができるということを意味します。 +ですからこれらの関数にアクセス権限を与えるのは慎重に考慮したほうが良いでしょう。 + +これらの関数に権限を付与する場合、オプションパラメータを示すテーブルエントリは、ほとんどの場合、異なるパラメータリストを持つ複数の物理的な関数として実装されることに注意してください。 +使用する場合は、各関数に対して個別に権限を付与する必要があります。 +psql\dfコマンドは、実際の関数シグネチャが何であるかをチェックするのに役立ちます。 + +これらの関数の一部はオプションでmissing_okパラメータをとり、ファイルまたはディレクトリが存在しない場合の動作を指定できます。 +trueの場合、関数はNULLを返すか、適切な場合には空の結果集合を返します。 +falseの場合はエラーが発生します。 +(ファイルが見つかりません以外の失敗条件は、どのケースでもエラーとして報告されます。) +デフォルトはfalseです。
+ + 汎用ファイルアクセス関数 + +関数 + +説明 @@ -30931,6 +40634,7 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size setof text + +指定されたディレクトリ内のすべてのファイル(およびディレクトリと他の特殊ファイル)の名前を返します。 +include_dot_dirs...が結果集合に含まれるかどうかを指定します。 +デフォルト(false)ではそれらを除外しますが、それらを含めると、missing_oktrueの場合は、空のディレクトリと存在しないディレクトリを区別するために役立つでしょう。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -30958,14 +40669,21 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +サーバのログディレクトリ内の各通常ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールの権限を持つロールに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -30981,15 +40699,22 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +先行書き込みログ(WAL)ディレクトリ内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールの権限を持つロールに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31005,15 +40730,22 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +サーバのpg_logical/mappingsディレクトリ内の各通常ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31029,15 +40761,22 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +サーバのpg_logical/snapshotsディレクトリ内の各通常ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31053,16 +40792,24 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +サーバのpg_replslot/slot_name内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +slot_nameは、関数の入力として提供されているレプリケーションスロットの名前です。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31078,15 +40825,22 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +サーバのWAL要約ディレクトリ(pg_wal/summaries)内の各ファイルについて、名前、サイズ、および最終更新時間(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ、その他の特殊ファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31102,15 +40856,22 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +WALアーカイブステータスディレクトリ(pg_wal/archive_status)内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31127,6 +40888,7 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size modificationtimestamp with time zone ) + +指定されたtablespace内の一時ファイルディレクトリ内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 +tablespaceが与えられなければpg_defaultテーブル空間が検査されます。 +ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 + +デフォルトではこの関数の実行はスーパーユーザとpg_monitorロールのメンバに限定されますが、他のユーザに関数を実行するEXECUTE権限を与えることができます。 @@ -31151,6 +40920,7 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size text + +与えられたoffsetから始まり、最大lengthバイト(先にファイルの終りに到達すればこれより少なくなります)テキストファイルの全部または一部分を返します。 +offsetが負の場合にはファイルの終りから数えた位置から読み出します。 +offsetlengthが省略された場合、ファイル全体が返されます。 +ファイルから読み込まれたバイトは、そのサーバの符号化方式での文字列として解釈されます。 +読み込んだバイト列がその符号化方式において有効でない場合にはエラーが投げられます。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -31176,19 +40955,30 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size bytea + +ファイルの一部あるいは全部を返します。 +結果がtextではなくてbytea値となり、任意のバイナリデータを読み出すことができることを除き、pg_read_fileと同じです。 +従って符号化方式の検査は行われません。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 + +convert_from関数と組み合わせることで、この関数を、指定した符号化方式でファイルを読み込んでデータベース符号化方式に変換することができます。 SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); @@ -31210,14 +41000,20 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); isdir boolean ) + +ファイル容量、最終アクセス時刻、最終更新時刻、最後にファイルステータスを変更した時刻(これはUnixプラットフォームのみ)、ファイル作成時刻(Windowsのみ)および、ディレクトリかどうかを示すフラグを返します。 + +デフォルトではこの関数の実行はスーパーユーザに限定されますが、他のユーザにも関数を実行するEXECUTE権限を与えることができます。 @@ -31228,15 +41024,23 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); + + 勧告的ロック用関数 + +に示す関数は勧告的ロックを管理します。 +これらの関数の適切な使用方法についての詳細は、を参照してください。 + +これらの関数はすべて単一の64ビットキー値か2つの32ビットキー値(これらのキー空間は重なり合わないことに注意してください)で識別されるアプリケーション定義のリソースをロックするために使うことを意図しています。 +他のセッションがすでに同じリソース識別子とコンフリクトするロックを保持していたら、関数はリソースが利用可能になるまで待つか、その関数にとって適切ならばfalseを結果として返します。 +ロックは共有はあるいは排他のどちらも可能です。共有ロックは同じリソースに対して他の共有ロックとコンフリクトしません。排他ロックとだけコンフリクトします。 +ロックはセッションレベル(ロックは解放されるまで保持するかセッションの終了まで保持します)あるいはトランザクションレベル(ロックは現在のトランザクションが終了するまで保持します。手動で解放する方法はありません)で取得できます。 +複数のセッションレベルロック要求は積み重ねられます。これにより、同じリソース識別子が3回ロックされると、セッション終了前にそのリソースを解放するアンロック要求が3回発行されなければならなくなります。
+ + 勧告的ロック用関数 + +関数 + +説明 @@ -31282,7 +41101,10 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); void + +必要なら待ってからセッションレベルの排他勧告的ロックを獲得します。 @@ -31299,7 +41121,10 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); void + +必要なら待ってからセッションレベルの共有勧告的ロックを獲得します。 @@ -31316,10 +41141,15 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); boolean + +事前に獲得したセッションレベルの排他的勧告ロックを解放します。 +ロックの解放に成功した場合、trueを返します。 +ロックを保持していない場合、falseを返し、さらに、SQL警告がサーバから報告されます。 @@ -31332,9 +41162,13 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); void + +現在のセッションで保持するセッションレベルの勧告的ロックをすべて解放します。 +(この関数は、クライアントとの接続が不用意に切れた場合でも、セッション終了時に暗黙的に呼び出されます。) @@ -31351,10 +41185,15 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); boolean + +事前に獲得したセッションレベルの共有勧告的ロックを解放します。 +ロックの解放に成功した場合、trueを返します。 +ロックを保持していない場合、falseを返し、さらに、SQL警告がサーバから報告されます。 @@ -31371,8 +41210,11 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); void + +必要なら待ってからトランザクションレベルの排他勧告的ロックを獲得します。 @@ -31389,8 +41231,11 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); void + +必要なら待ってからトランザクションレベルの共有勧告的ロックを獲得します。 @@ -31407,10 +41252,14 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); boolean + +可能ならセッションレベルの排他勧告的ロックを獲得します。 +これは直ちにロックを取得してtrueを返すか、直ちにロックを取得できない場合は待たずにfalseを返します。 @@ -31427,10 +41276,14 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); boolean + +可能ならセッションレベルの共有勧告的ロックを獲得します。 +これは直ちにロックを取得してtrueを返すか、直ちにロックを取得できない場合は待たずにfalseを返します。 @@ -31447,10 +41300,14 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); boolean + +可能ならトランザクションレベルの排他勧告的ロックを獲得します。 +これは直ちにロックを取得してtrueを返すか、直ちにロックを取得できない場合は待たずにfalseを返します。 @@ -31467,10 +41324,14 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); boolean + +可能ならトランザクションレベルの共有勧告的ロックを獲得します。 +これは直ちにロックを取得してtrueを返すか、直ちにロックを取得できない場合は待たずにfalseを返します。 @@ -31482,9 +41343,13 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); + + トリガ関数 + +多くの場合トリガにはユーザ記述のトリガ関数が必要になりますが、PostgreSQLはユーザ定義トリガで直接使用できる小数の組み込みの取り化関数を提供しています。 +これらはにまとめられています。 +(追加の組み込みトリガ関数があり、外部キー制約と遅延インデックス制約を実装しています。 +ユーザがこれらを直接必要とすることはないので、ここには記述されていません。) + +トリガ作成についてのより詳細はを参照してください。
+ + 組み込みトリガ関数 + +関数 + +説明 + +使用例 @@ -31526,7 +41411,11 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); trigger + +do-nothing更新操作を抑止します。 +詳細は以下を参照してください。 CREATE TRIGGER ... suppress_redundant_updates_trigger() @@ -31542,10 +41431,15 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); trigger + +関連付けされた平文文書列から自動的にtsvector列を更新します。 +使用するテキスト検索設定はトリガ引数で指定します。 +詳細はをご覧ください。 CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body) @@ -31561,10 +41455,15 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8'); trigger + +関連付けされた平文文書列から自動的にtsvector列を更新します。 +使用するテキスト検索設定はテーブルのregconfig列が用いられます。 +詳細はをご覧ください。 CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, tsconfigcol, title, body) @@ -31575,6 +41474,7 @@ SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');
+ +行レベルBEFORE UPDATEトリガとしてsuppress_redundant_updates_trigger関数が適用されると、実際には行の中でデータを変更しない更新が行われるのを防ぎます。 +これはデータが変更されるかどうかに関わらず、物理的に行の更新を行う通常の振る舞いを置き換えます。 +(この通常の動作は、検査を必要としないため更新をより迅速に行い、場合によっては便利です。) + +理想的には、通常実際レコード内のデータを変更しない更新の実行を避けるべきです。 +冗長な更新により、特に変更対象の多くのインデックスが存在する場合、無視できない不要な時間にかかるコストが発生することがあります。 +また、最後にはバキュームしなければならなくなる不要行が場所を取ることになります。 +しかし、こうした状況をクライアント側で判定することは常に簡単ではありません。 +また、可能であったとしても、それを検知するための式の記述はエラーを招きがちです。 +他の方法として、suppress_redundant_updates_triggerを使用することがあります。 +これはデータを変更しない更新をスキップします。 +しかしこの関数は注意して使用しなければなりません。 +このトリガはレコードごとに小さな、しかし僅かではない時間がかかります。 +このため、更新が影響するレコードのほとんどが実際に変更された場合、このトリガは平均すると更新の実行を低速にします。 + +suppress_redundant_updates_trigger関数は以下のようにテーブルに追加できます。 CREATE TRIGGER z_min_update BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); + +ほとんどの場合、行を変更するかも知れない他のトリガを置き換えないために、それぞれの行に対しこのトリガを最後に起動させる必要があります。 +トリガは名前順に起動されることを判っているとして、テーブル上に存在する可能性のある他のトリガの名前の後に続くようトリガ名を選択できます。 +(それで例中にz接頭辞があります。)
+ + イベントトリガ関数 + +PostgreSQLはイベントトリガについての情報を取得するために以下のヘルパ関数を提供しています。 + +イベントトリガについての詳細はを参照して下さい。 + + コマンド側での変更を捕らえる pg_event_trigger_ddl_commands @@ -31642,6 +41578,7 @@ FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); + +pg_event_trigger_ddl_commandsddl_command_endイベントトリガに付与された関数から起動されると、各ユーザの操作によって実行されたDDLコマンドの一覧を返します。 +それ以外の環境から呼び出された場合はエラーが発生します。 +pg_event_trigger_ddl_commandsは、実行された基となるコマンドのそれぞれについて1行を返します。 +1つのSQL文として実行されるいくつかのコマンドに対して、複数の行が返されることもあります。 +この関数は以下の列を返します。 + + 名前 + + + + 説明 @@ -31666,57 +41618,88 @@ FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); classid oid + + オブジェクトが属するカタログのOID objid oid + + カタログ内のオブジェクトのOID objsubid integer + + オブジェクトのサブID(例えば、列の列番号) command_tag text + + コマンドのタグ object_type text + + オブジェクトの型 schema_name text + +オブジェクトが属するスキーマの名前(あれば)。 +なければNULL。 +引用符づけされない。 object_identity text + +オブジェクトの識別をテキスト表現したもので、スキーマ修飾される。 +識別内に存在する各識別子は、必要なら引用符で括られる。 in_extension boolean + + コマンドが拡張のスクリプトの一部なら真 command pg_ddl_command + +コマンドを内部形式で完全に表現したもの。 +これを直接出力することはできないが、コマンドについて他の情報を得るために、他の関数に渡すことができる。 @@ -31726,7 +41709,10 @@ FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); + + DDLコマンドで削除されたオブジェクトの処理 pg_event_trigger_dropped_objects @@ -31737,18 +41723,32 @@ FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); + +関数pg_event_trigger_dropped_objectsは、それが呼ばれたsql_dropイベントのコマンドにより削除された全てのオブジェクトのリストを返します。 +それ以外の状況で呼ばれた場合、エラーが生じます。 +この関数は以下の列を返します。 + + 名前 + + + + 説明 @@ -31756,84 +41756,124 @@ FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); classid oid + + オブジェクトが所属するカタログのOID objid oid + + カタログ内に所有するオブジェクトのOID objsubid integer + + オブジェクトのサブID(例えば、列の列番号) original boolean + + これが削除のルートオブジェクトの一つなら真 normal boolean + +このオブジェクトへと至る依存関係グラフで、通常の依存があるなら真 is_temporary boolean + +オブジェクトが一時オブジェクトであったなら真 object_type text + + オブジェクトの型 schema_name text + +オブジェクトが所属しているスキーマの名前(あれば)。 +なければNULL。 +引用符づけされない。 object_name text + +スキーマと名前の組み合わせがオブジェクトに対する一意の識別子として使用可能な場合はオブジェクトの名前。そうでないときはNULL。 +引用符は適用されず、名前は決してスキーマで修飾されない。 object_identity text + +オブジェクト識別のテキスト表現で、スキーマ修飾される。 +識別内に存在する各識別子は必要であれば引用符で括られる。 address_names text[] + +object_typeおよびaddress_argsと一緒にpg_get_object_address()で使うことで、同じ種類で全く同じ名前のオブジェクトを含むリモートサーバ内のオブジェクトアドレスを再作成できる配列。 address_args text[] + +address_namesの補足。 @@ -31842,8 +41882,11 @@ FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger(); + +関数pg_event_trigger_dropped_objectsは以下のようにイベントトリガとして使用可能です。 CREATE FUNCTION test_event_trigger_for_drops() RETURNS event_trigger LANGUAGE plpgsql AS $$ @@ -31869,26 +41912,42 @@ CREATE EVENT TRIGGER test_event_trigger_for_drops + + テーブル書き換えイベントの処理 + +に示す関数は、table_rewriteイベントが呼び出されたばかりのテーブルについての情報を提供します。 +それ以外の状況で呼び出された場合はエラーが発生します。 + + テーブル書き換え情報関数 + +関数 + +説明 @@ -31903,7 +41962,10 @@ CREATE EVENT TRIGGER test_event_trigger_for_drops oid + +書き換えようとされているテーブルのOIDを返します。 @@ -31916,12 +41978,16 @@ CREATE EVENT TRIGGER test_event_trigger_for_drops integer + +書き換えの理由を説明するコードを返します。 +値は、次の値から作成されたビットマップです:1(テーブルの永続性が変更された)、2(列のデフォルト値が変更された)、4(列に新しいデータ型ある)および8(テーブルアクセスメソッドが変更された)。 @@ -31929,7 +41995,10 @@ CREATE EVENT TRIGGER test_event_trigger_for_drops
+ +これらの関数はイベントトリガ中で次のように使用できます。 CREATE FUNCTION test_event_trigger_table_rewrite_oid() RETURNS event_trigger @@ -31951,20 +42020,33 @@ CREATE EVENT TRIGGER test_table_rewrite_oid
+ + 統計情報関数 function statistics + + 関数 + 統計 + + +PostgreSQLCREATE STATISTICSコマンドを使って定義した複雑な統計を調べる関数を提供しています。 + + MCVリストの検査 pg_mcv_list_items @@ -31975,17 +42057,30 @@ CREATE EVENT TRIGGER test_table_rewrite_oid + +pg_mcv_list_itemsは複数列MCVリストに格納されたすべての項目を列挙します。 +この関数は次の列を返します。 + + 名前 + + + + 説明 @@ -31993,27 +42088,42 @@ CREATE EVENT TRIGGER test_table_rewrite_oid index integer + + MCVリスト内の項目のインデックス values text[] + + MCV項目に格納された値 nulls boolean[] + + NULL値を識別するフラグ frequency double precision + + このMCV項目の頻度 base_frequency double precision + + このMCV項目のベース頻度 @@ -32021,19 +42131,26 @@ CREATE EVENT TRIGGER test_table_rewrite_oid + +pg_mcv_list_items関数は次のように使用することができます。 SELECT m.* FROM pg_statistic_ext join pg_statistic_ext_data on (oid = stxoid), pg_mcv_list_items(stxdmcv) m WHERE stxname = 'stts'; + +pg_mcv_list型の値はpg_statistic_ext_data.stxdmcv列からのみ得られます。
+ diff --git a/doc/src/sgml/func1.sgml b/doc/src/sgml/func1.sgml index 57f7117a94e..a38da1a400e 100644 --- a/doc/src/sgml/func1.sgml +++ b/doc/src/sgml/func1.sgml @@ -1783,7 +1783,7 @@ NULL引数の数を返す。 -《機械翻訳》ガンマ・関数 +ガンマ関数 gamma(0.5) @@ -1857,7 +1857,7 @@ NULL引数の数を返す。 -《機械翻訳》ガンマ関数の絶対値の自然対数。 +ガンマ関数の絶対値の自然対数 lgamma(1000) @@ -3954,9 +3954,10 @@ NULL引数は無視されます。 cased form. This function can only be used when the server encoding is UTF8. --> -《機械翻訳》ケースに従って、入力された文字列の照合順序・フォールディングを実行します。 -ケース・フォールディングはケース・変換に似ていますが、ケース・フォールディングの目的は、文字列のケースを意識しないマッチングを容易にすることであり、ケース・変換の目的は、特定のケースのフォームに変換することです。 -この関数は、サーバエンコーディングがUTF8である場合にのみ使用できます。 +照合順序に従い、入力文字列の大文字小文字変換(case folding)を行います。 +casefoldによる大文字小文字変換は、lowerやupperなどによる大文字小文字変換と似ています。 +ただし、後者の変換の目的は大文字と小文字を区別した特定の形式に変換することであるのに対し、前者の変換の目的は大文字と小文字を区別しない文字列のマッチングを容易にすることです。 +この関数は、サーバ符号化方式がUTF8の場合にのみ使用できます。 -《機械翻訳》通常、ケース折りは単純に小文字に変換されますが、照合順序によっては例外がある場合があります。 -インスタンスでは、いくつかの文字に2つ以上の小文字のバリエーションがあるか、大文字に折り畳まれます。 +通常は単純に小文字に変換しますが、照合順序によっては例外があります。 +例えば、一部の文字には小文字の種類が3つ以上ある場合や、大文字に変換する場合があります。 -《機械翻訳》ケースの折り畳みは、文字列の長さを変化させる可能性がある。 -インスタンスの場合、PG_UNICODE_FAST照合順序では、ß(U+00 DFはssに折り畳まれる。 +この変換により文字列の長さが変わることがあります。 +例えば、照合順序PG_UNICODE_FASTでは、ß(U+00DF)をssに変換します。 -《機械翻訳》casefold Unicodeデフォルトケースレスマッチングに使用できます。 -入力したフォームの正規化文字列が常に保持されるとは限りません。 -を参照してください。 +casefoldは、Unicodeのデフォルトの大文字小文字を区別しないマッチングに使用できます。 +入力文字列の正規化された形式を常に保持するわけではありません(を参照してください)。 -《機械翻訳》libcプロバイダはケース折りをサポートしないので、casefoldと同じです。 +libcプロバイダはこの大文字小文字変換をサポートしていないので、casefoldと同じです。 @@ -4410,9 +4410,8 @@ POSIX正規表現patternの一致がstring. --> -《マッチ度[53.980100]》POSIX正規表現patternN番目に一致する部分文字列、またはNが0の場合にすべて一致する部分文字列を置き換えます。を参照してください。 -《機械翻訳》部分文字列であるN'番目のマッチをPOSIXの正規表現pattern、またはNがゼロである場合に一致するすべてのものに、stringstart'番目の文字で始まる検索で置換します。 -Nを省略した場合、デフォルトは1になります。 +stringstart番目の文字から検索を始めて、POSIX正規表現patternN番目に一致する部分文字列、またはNが0の場合は一致するすべての部分文字列を置換します。 +Nを省略すると、デフォルトで1になります。 を参照してください。 @@ -5725,7 +5724,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); -《機械翻訳》バイナリ文字列のCRC-32値を計算します。 +バイナリ文字列のCRC-32値を計算します。 crc32('abc'::bytea) @@ -5745,7 +5744,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); -《機械翻訳》バイナリ文字列のCRC-32C値を計算します。 +バイナリ文字列のCRC-32C値を計算します。 crc32c('abc'::bytea) @@ -5883,8 +5882,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); -《マッチ度[62.264151]》バイナリ文字列のバイト数を返します。 -《機械翻訳》オーダー内のバイトのバイナリ文字列を反転します。 +バイナリ文字列のバイトの順序を反転します。 reverse('\xabcd'::bytea) @@ -6369,13 +6367,9 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three'); is the two's complement representation of the integer, with the most significant byte first. Some examples: --> -《マッチ度[54.231975]》さらに、bit型から整数値にキャストすることも整数からbit型にキャストすることも可能です。 -整数からbit(n)にキャストすると最右端のnビットがコピーされます。 -その整数より文字列幅が広いビットにキャストすると左のビットが符号拡張されます。 -以下に例を示します。 -《機械翻訳》さらに、キャストbyteaとの間で整数値をタイプすることができます。 -整数をbyteaにキャストすると、整数型の2の補数に応じて2、4、または8バイトが生成されます。 -結果は、最上位バイトが最初になる、整数の列幅表現形式です。 +さらに、bytea型から整数値にキャストすることも整数値からbytea型にキャストすることも可能です。 +整数値をbyteaにキャストすると、整数型の幅に応じて、2、4、または8バイトで生成されます。 +結果は整数の2の補数表現で、最上位バイトが先頭になります。 いくつかの例を示します。 1234::smallint::bytea \x04d2 @@ -6388,7 +6382,7 @@ cast(-1234 as bytea) \xfffffb2e Casting a bytea to an integer will raise an error if the length of the bytea exceeds the width of the integer type. --> -《機械翻訳》byteaを整数にキャストすると、byteaのエラーがinteger型の長さを超えた場合にWIDTHが発生します。 +byteaを整数にキャストする場合、byteaの長さが整数型の幅を超えるとエラーが発生します。 @@ -6940,10 +6934,8 @@ cast(-44 as bit(12)) 111111010100 LIKE or apply a different collation to the expression to work around this limitation. --> -《マッチ度[55.905512]》この3種類のパターンマッチング演算子はどれも非決定的照合順序をサポートしていません。 -必要なら、この制限事項に対応するために別の照合順序を式に適用してください。 -《機械翻訳》SIMILAR TOおよびPOSIX-スタイル照合順序は非決定性照合をサポートしません。 -必要に応じて、LIKEを使用するか、式に別の制限を適用して、この正規表現をワークアラウンドします。 +SIMILAR TOPOSIX書式の正規表現は、非決定論的照合順序をサポートしていません。 +必要なら、LIKEを使用するか別の照合順序を式に適用することで、この制限事項に対応してください。 @@ -7008,8 +7000,8 @@ cast(-44 as bit(12)) 111111010100 case-insensitive collations or collations that, say, ignore punctuation. So with a case-insensitive collation, one could have: --> -《機械翻訳》LIKEパターンマッチは、ケースに依存しない照合や句読点を無視する照合など、非決定性照合を参照をサポートしています。 -したがって、ケースに依存しない照合順序では、次のようになります。 +LIKEパターンマッチングは、大文字と小文字を区別しない照合や句読点を無視する照合など、非決定論的照合順序をサポートします(を参照)。 +したがって、大文字と小文字を区別しない照合順序では、次のようになります。 'AbC' LIKE 'abc' COLLATE case_insensitive true 'AbC' LIKE 'a%' COLLATE case_insensitive true @@ -7019,8 +7011,8 @@ cast(-44 as bit(12)) 111111010100 strings of different lengths equal, the semantics can become a bit more complicated. Consider these examples: --> -《機械翻訳》特定の文字を無視する照合や、一般に異なる長さの文字列を等しいとみなす照合では、セマンティクスがさらに複雑なビットになる可能性があります。 -次の例を考えてみてください。 +特定の文字を無視する照合順序や、一般的に異なる長さの文字列を等しいと見なす照合順序では、セマンティクスが少し複雑になる可能性があります。 +次の例を考えてみましょう。 '.foo.' LIKE 'foo' COLLATE ign_punct true '.foo.' LIKE 'f_o' COLLATE ign_punct true @@ -7049,16 +7041,15 @@ cast(-44 as bit(12)) 111111010100 _ would match ., but then the rest of the input string won't match the rest of the pattern.) --> -《機械翻訳》マッチングが機能する方法は、パターンがワイルドカードと非ワイルドカード文字列のシーケンスにパーティション化されることです(ワイルドカードは_および%です)。 -例の場合、パターンはf, _, oにパーティション化され、パターン_oo_, ooにパーティション化されます。 -入力された文字列は、ワイルドカードマッチがそれぞれ1文字または任意の数の文字であり、非ワイルドカードパーティションが適用される照合順序の下で等しいようにパーティション化できる場合、パターンに一致します。 -例の場合、'.foo.' LIKE 'f_o' COLLATE ign_punctは真です。 -これは、パーティション.foo..f, o, o.にパーティション化でき、'.f' = 'f' COLLATE ign_punct'o'_ワイルドカード、および'o.' = 'o' COLLATE ign_punctに一致します。 -しかし'.foo.' LIKE '_oo' COLLATE ign_punctは偽です。 -これは、は最初の文字が任意の文字であり、文字列の残りの部分が等しいを比較するようにパーティション化できないためです。 -(ノートでは、1文字のワイルドカードは照合順序とは無関係に常に1文字に正確に一致します。 -したがって、この例では、_はマッチになりますが、入力された文字列の残りの部分はの残りの部分にしません。) -f_oマッチパターン.foo. . oo +マッチングの仕組みとして、パターンがワイルドカードと非ワイルドカード文字列(ワイルドカードは_%です)の並びに分割されます。 +たとえば、パターンf_of, _, oと分割され、パターン_oo_, ooと分割されます。 +ワイルドカードがそれぞれ1文字または任意の数の文字と一致し、ワイルドカード以外の区分が該当する照合順序で等しくなるように分割できる場合、入力文字列はパターンと一致します。 +そのため、例えば、'.foo.' LIKE 'f_o' COLLATE ign_punctはtrueになります。 +これは、.foo..f, o, o.と分割でき、'.f' = 'f' COLLATE ign_punctとなり、'o'はワイルドカード_と一致し、'o.' = 'o' COLLATE ign_punctとなるからです。 +しかし、'.foo.' LIKE '_oo' COLLATE ign_punctはfalseになります。 +これは、.foo.は最初の文字が任意の文字で、残りの文字列がooと等しくなるように分割することができないためです。 +(1文字のワイルドカードは、照合順序に関係なく、常に1文字のみに一致することに注意してください。 +したがって、この例では、_.に一致しますが、入力文字列の残りの部分はパターンの残りの部分と一致しません。) @@ -7128,10 +7119,9 @@ cast(-44 as bit(12)) 111111010100 This is not in the SQL standard but is a PostgreSQL extension. --> -《マッチ度[76.699029]》現在のロケールに従って大文字小文字を区別しない一致を行うのであれば、LIKEの代わりにILIKEキーワードを使うことができます。 +現在のロケールに従って大文字小文字を区別しない一致を行うのであれば、LIKEの代わりにILIKEキーワードを使うことができます。 +(しかし、これは非決定的照合順序ではサポートされません。) これは標準SQLではなく、PostgreSQLの拡張です。 -《機械翻訳》キーワードILIKEを代わりLIKEで使用して、マッチをmakeケースに応じてアクティブロケールに依存しないようにすることができます(ただし、これはサポート非決定性照合順序ではありません)。 -これはSQL標準ではなくPostgreSQLextensionです。 @@ -8060,21 +8050,20 @@ SELECT col1, (SELECT regexp_matches(col2, '(bar)(beque)')) FROM tab; not g) are described in . --> -《マッチ度[84.125705]》regexp_replace関数は、POSIX正規表現パターンにマッチする部分文字列を新規テキストと置換します。 -構文は、regexp_replace(source, pattern, replacement, start, N, flags )です。 -(startが指定されない限り、Nを指定できないこと、flagsはいつでも指定できることに注意してください。) -patternにマッチしない場合は、source文字列がそのまま返されます。 -マッチすると、マッチ部分文字列をreplacement文字列で置換したsource文字列が返されます。 -replacement文字列に\nnは1から9までの数字)を入れて、パターン内のn番目の丸括弧つき部分表現にマッチする元の部分文字列を挿入することができます。 -また、\&を入れて、パターン全体とマッチする部分文字列を挿入することもできます。 +regexp_replace関数は、POSIX正規表現パターンに一致する部分文字列を新規テキストと置換します。 +構文は、regexp_replace(string, pattern, replacement , flags )、またはregexp_replace(string, pattern, replacement, start , N , flags )です。 +patternに一致しない場合は、元のstring文字列がそのまま返されます。 +一致すると、一致した部分文字列をreplacement文字列で置換したstringが返されます。 +replacement文字列に\nnは1から9までの数字)を入れて、パターン内のn番目の丸括弧つき部分表現に一致する元の部分文字列を挿入することができます。 +また、\&を入れて、パターン全体と一致する部分文字列を挿入することもできます。 置換テキスト内にバックスラッシュそのものを挿入する必要がある時は\\と記述します。 通常stringの先頭からpatternが文字列内で検索されますが、start引数が与えられるとその文字インデックスから検索されます。 -デフォルトではパターンに一致した最初のマッチのみが置き換えられます。 -Nが指定され、それがゼロよりも大きい時は、パターンとN番目に一致したマッチが置き換えられます。 -gフラグが指定されるか、Nが指定されてそれがゼロなら、start位置あるいはそれ以降のすべてのマッチが置き換えられます。 +デフォルトでは、最初に一致したパターンのみが置き換えられます。 +Nが指定され、それがゼロよりも大きい時は、N番目に一致したパターンが置き換えられます。 +gフラグが指定されているか、Nがゼロに指定されている場合は、start位置以降で一致するすべてのパターンが置き換えられます。 (gフラグはNが指定されている時は無視されます。) flagsパラメータは、関数の動作を変更するゼロもしくはそれ以上の1文字フラグを含むオプションのテキスト文字列です。 -有効なフラグは(gを除く)に記述されています。 +有効なフラグ(gを除く)はに記述されています。 diff --git a/doc/src/sgml/func2.sgml b/doc/src/sgml/func2.sgml index c8a8a05ff24..e41d0049eee 100644 --- a/doc/src/sgml/func2.sgml +++ b/doc/src/sgml/func2.sgml @@ -1325,8 +1325,14 @@ ISO 8601週番号年の文脈では、、あるいは 指定された位置にプラス/マイナス記号 + + RNまたはrn + + ローマ数字(1から3999までの値) -《マッチ度[70.774092]》Vto_charにつけると、入力値を10^n倍します。 +Vto_charにつけると、入力値を10^n倍します。 ここでnVに続く桁数です。 Vto_numberにつけると、同じように割り算をします。 -to_charおよびto_numberは、小数点とVとの混在をサポートしません(例えば、99.9V99 とはできません)。 -《機械翻訳》Vwith to_char入力値に10^nを掛ける、ここでnVに続く桁数である。 -Vwith to_numberは同様の方法で除算する。 -Vは、マーキングとして、入出力10進数内の暗黙的なポイント文字列の位置と考えることができる。 -to_charおよびto_numberは、Vを10進数ポイントと組み合わせて使用することをサポートしない(例えば、99.9V99は許可されない)。 +Vは入力文字列または出力文字列内の暗黙の小数点の位置を示すものと考えることができます。 +to_charおよびto_numberは、小数点とVとの組み合わせをサポートしません(例えば、99.9V99とはできません)。 @@ -1526,10 +1529,10 @@ ISO 8601週番号年の文脈では、、あるいは in to_char() and is ignored in to_number(). --> -《機械翻訳》to_number()では、RNパターンはローマ数字(標準フォーム)を数値に変換します。 -入力はケースに依存しないため、RNrnは同等です。 -RNは他の書式パターンまたは修飾子と組み合わせることはできません。 -FMto_char()でのみ使用でき、to_number()では無視されます。 +to_number()において、RNパターンはローマ数字(標準形式)を数字に変換します。 +入力では大文字と小文字が区別されないため、RNrnは同等です。 +RNは、他の書式パターンやFMを除く修飾子と組み合わせて使用することはできません。 +FMは、to_char()でのみ適用され、to_number()では無視されます。 @@ -1584,7 +1587,6 @@ ISO 8601週番号年の文脈では、、あるいは - FM99.99 + <function>EXTRACT</function>と<function>date_part</function> date_part @@ -3597,8 +3602,8 @@ SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); for interval values, the month field divided by 3 plus 1 --> -《機械翻訳》日付が含まれる年のクォータ(1–4)。 -interval値の場合は、フィールド月を3プラスで除算します1。 +その日付が含まれる年の四半期(1–4)。 +interval値の場合、月フィールドを3で除算して1を加算した値 @@ -3704,7 +3709,7 @@ ISO週番号システムでは、1月の早い日にちは前年の第52週も For interval values, the week field is simply the number of integral days divided by 7. --> -《機械翻訳》interval値の場合、フィールド週は単純に整数の日数を7で割ったものになります。 +interval値の場合、週フィールドは単純に整数の日にちを7で除算した数値になります。 @@ -4249,17 +4254,12 @@ SELECT TIME WITH TIME ZONE '20:38:40-05' AT LOCAL; ISO-8601 datetime literal, as described in and . --> -《マッチ度[67.012687]》最初の例は、時間帯のない値に時間帯を追加し、現在のTimeZone設定を使ってその値を表示します。 +最初の例は、時間帯のない値に時間帯を追加し、現在のTimeZone設定を使ってその値を表示します。 2番目の例は、time stamp with time zone値を指定した時間帯に変換し、その値をwithout a time zoneで返しています。 これは、TimeZone設定とは異なる値の格納と表示を可能にします。 3番目の例は、東京時間をシカゴ時間に変換します。 4番目の例は、タイムスタンプをTimeZone設定で指定された現在のタイムゾーンにシフトし、タイムゾーンなしで値を返します。 -《機械翻訳》最初の例は、タイムゾーンを持たない値に現在を追加し、その値をTimeZone設定を使用して表示します。 -2番目の例は、タイムゾーン値を持つタイムスタンプを指定されたタイムゾーンに移動し、タイムゾーンなしの値を戻します。 -これにより、現在TimeZone設定とは異なる値のストレージとディスプレイが可能になります。 -3番目の例は、東京時間をシカゴ時間に変換します。 -4番目の例は、タイムゾーン値を持つタイムスタンプをTimeZone設定で現在指定されているタイムゾーンに移動し、タイムゾーンなしの値を戻します。 -5番目の例は、およびで説明されているように、POSIX-スタイルタイムゾーン指定の符号がISO-8601日時リテラルの符号とは反対の意味を持つことを示しています。 +5番目の例は、およびで説明されているように、POSIX様式のタイムゾーン指定の記号がISO-8601日時リテラルの記号とは反対の意味を持つことを示しています。 @@ -4270,7 +4270,7 @@ SELECT TIME WITH TIME ZONE '20:38:40-05' AT LOCAL; result depending on the time of the year it is viewed because 'America/Los_Angeles' observes Daylight Savings Time. --> -《マッチ度[93.802817]》第5の例は警告を含みます。 +第6の例は警告を含みます。 入力値に日付が関連付けられていないため、変換はセッションの現在の日付を使用して行われます。 したがって、この静的な例は、'America/Los_Angeles'がサマータイムを使用しているため、表示される年の時期によっては誤った結果を示す可能性があります。 @@ -8434,16 +8434,18 @@ OIDで指定したパーサが認識できるトークンの型を記述する shows the PostgreSQL functions that can be used to generate UUIDs. --> -《機械翻訳》は、UUIDの生成に使用できるPostgreSQL関数を示しています。 +は、UUIDの生成に使用できるPostgreSQLの関数を示しています。 + + <acronym>UUID</acronym>生成関数 - - + @@ -8460,27 +8462,26 @@ OIDで指定したパーサが認識できるトークンの型を記述する Example(s) --> 例 - - + - - - gen_random_uuid + + gen_random_uuid ( ) uuid - uuidv4 + uuidv4 ( ) uuid -《機械翻訳》バージョン4(ランダム)のUUIDを作成します。 +《マッチ度[68.571429]》バージョン4(ランダム)のUUIDを生成します。 +《機械翻訳》«Generates a version 4 (random) UUID» gen_random_uuid() @@ -8489,31 +8490,30 @@ OIDで指定したパーサが認識できるトークンの型を記述する uuidv4() b42410ee-132f-42ee-9e4f-09a6485c95b8 - - + - - - uuidv7 + + uuidv7 ( shift interval ) uuid -《機械翻訳》バージョン7 shift時間順のUUIDを生成します。 -タイムスタンプは、UNIXタイムスタンプを使用して、ミリ秒精度+サブ-ミリ秒タイムスタンプ+ランダムで計算されます。 -オプショナルパラメータは、指定したintervalで計算されたタイムスタンプをシフトします。 +《マッチ度[90.942029]》バージョン7(時間順)のUUIDを生成します。 +タイムスタンプは、ミリ秒精度のUNIXタイムスタンプ+サブミリ秒のタイムスタンプ+ランダム値を使用して計算されます。 +オプションのパラメータshiftは、計算されたタイムスタンプを指定されたintervalだけシフトします。 uuidv7() 019535d9-3df7-79fb-b466-fa907fa17f9e - - + @@ -8525,7 +8525,7 @@ OIDで指定したパーサが認識できるトークンの型を記述する The module provides additional functions that implement other standard algorithms for generating UUIDs. --> -《マッチ度[95.419847]》モジュールはUUID生成のための他の標準アルゴリズムを実装した追加の関数を提供します。 +モジュールは、UUIDを生成するための他の標準アルゴリズムを実装した追加の関数を提供します。 @@ -8534,16 +8534,18 @@ OIDで指定したパーサが認識できるトークンの型を記述する shows the PostgreSQL functions that can be used to extract information from UUIDs. --> -《機械翻訳》は、UUIDから情報を抽出するために使用できるPostgreSQL関数を示しています。 +は、UUIDから情報を抽出するために使用できるPostgreSQL関数を示しています。
+ + <acronym>UUID</acronym>抽出関数 - - + @@ -8560,63 +8562,55 @@ OIDで指定したパーサが認識できるトークンの型を記述する Example(s) --> 例 - - + - - - uuid_extract_timestamp + + uuid_extract_timestamp ( uuid ) timestamp with time zone -《マッチ度[88.111888]》この関数はUUIDバージョン1からtimestamp with time zoneを抽出します。 +《マッチ度[84.137931]》この関数は、UUIDバージョン1と7からtimestamp with time zoneを抽出します。 他のバージョンでは、この関数はNULLを返します。 -抽出されたタイムスタンプは必ずしもUUIDが生成された時間と正確に同じではありません。これはUUIDが生成された実装に依存します。 -《機械翻訳》UUIDタイムスタンプ1および7からtimestamp with time zoneを抽出します。 -他のバージョンの場合、この関数はNULLを戻します。 -抽出されたタイムスタンプは、UUIDが生成された時刻と正確に一致する必要はありません。 -これは、UUIDを生成した実装によって異なります。 +抽出されたタイムスタンプは必ずしもUUIDが生成された時間と正確に同じではありません。 +これはUUIDを生成した実装に依存します。 +《機械翻訳》«Extracts a timestamp with time zone from a UUID of version 1 or 7. For other versions, this function returns null. Note that the extracted timestamp is not necessarily exactly equal to the time the UUID was generated; this depends on the implementation that generated the UUID.» uuid_extract_timestamp('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) 2025-02-23 21:46:24.503-05 - - + - - - uuid_extract_version + + uuid_extract_version ( uuid ) smallint -《マッチ度[86.851211]》この関数は、RFC 4122に記述されている種類のUUIDからバージョンを抽出します。 +《マッチ度[82.608696]》この関数は、RFC 9562に記述されている種類のUUIDからバージョンを抽出します。 他の種類については、この関数はNULLを返します。 例えば、gen_random_uuidによって生成されたUUIDに対して、この関数は4を返します。 -《機械翻訳》RFC 9562に記述されているバリアントのバージョンからUUIDを抽出します。 -他のバリアントの場合、この関数はNULLを返します。 -例の場合、gen_random_uuidによって生成されたUUIDの場合、この関数は結果4になります。 - +《機械翻訳》«Extracts the version from a UUID of one of the variants described by RFC 9562. For other variants, this function returns null. For example, for a UUID generated by gen_random_uuid(), this function will return 4.» uuid_extract_version('41db1265-8bc1-4ab3-992f-&zwsp;885799a4af1d'::uuid) @@ -8625,8 +8619,7 @@ OIDで指定したパーサが認識できるトークンの型を記述する uuid_extract_version('019535d9-3df7-79fb-b466-&zwsp;fa907fa17f9e'::uuid) 7 - - + @@ -8645,7 +8638,7 @@ OIDで指定したパーサが認識できるトークンの型を記述する See for details on the data type uuid in PostgreSQL. --> -《機械翻訳》データタイプUUIDについては、PostgreSQL)のを参照。 +PostgreSQLUUIDデータ型の詳細はを参照してください。 diff --git a/doc/src/sgml/func3.sgml b/doc/src/sgml/func3.sgml index 40b0d38f477..899d35118c7 100644 --- a/doc/src/sgml/func3.sgml +++ b/doc/src/sgml/func3.sgml @@ -1983,17 +1983,17 @@ pathについての演算子について言うと、path null array elements are also stripped. Otherwise they are not stripped. Bare null values are never stripped. --> -《機械翻訳》NULL値を持つすべてのオブジェクトフィールドを、指定されたJSON値から再帰的に削除します。 -strip_in_arraysが真(デフォルトは偽)の場合、NULL配列要素も削除されます。 +NULL値を持つすべてのオブジェクトフィールドを、指定されたJSON値から再帰的に削除します。 +strip_in_arraysがtrue(デフォルトはfalse)の場合、NULL配列要素も削除されます。 それ以外の場合は削除されません。 -裸のNULL値は削除されません。 +単独のNULL値は決して削除されません。 json_strip_nulls('[{"f1":1, "f2":null}, 2, null, 3]') [{"f1":1},2,null,3] - jsonb_strip_nulls('[1,2,null,3,4]', true); + jsonb_strip_nulls('[1,2,null,3,4]', true) [1,2,3,4] @@ -6224,8 +6224,7 @@ nullあるいは空の配列の結合は無処理です。そうでない場合 -《マッチ度[50.000000]》配列の次元数を返します。 -《機械翻訳》配列の最初の寸法を反転します。 +配列の最初の次元を逆にします。 array_reverse(ARRAY[[1,2],[3,4],[5,6]]) @@ -6304,9 +6303,9 @@ nullあるいは空の配列の結合は無処理です。そうでない場合 a COLLATE clause to the array argument. --> -《機械翻訳》配列の最初の次元をソートします。 -ソートオーダーは、配列の要素タイプのデフォルトソート順序付けによって決定されます。 -ただし、要素タイプが照合可能な場合は、array引数にCOLLATE句を追加することで、使用する照合順序を指定できます。 +配列の最初の次元をソートします。 +ソート順序は、その配列の要素型のデフォルトソート順序によって決定されます。 +ただし、要素型が照合可能な場合は、array引数にCOLLATE句を追加することで、使用する照合順序を指定できます。 -《機械翻訳》descendingが真の場合、ソートは降順になり、それ以外の場合は昇順になります。 +descendingがtrueの場合、ソートは降順になり、それ以外の場合は昇順になります。 省略した場合、デフォルトは昇順になります。 -NULLs_firstが真の場合、NULLは前の非NULL値として表示されます。 -それ以外の場合は、NULLは非NULL値の後に表示されます。 -省略した場合、NULLs_firstdescendingと同じ値を持つとみなされます。 +nulls_firstがtrueの場合は非NULL値の前にNULL値が表示され、それ以外の場合は非NULL値の後にNULL値が表示されます。 +省略した場合、nulls_firstdescendingと同じ値を持つとみなされます。 array_sort(ARRAY[[2,4],[2,1],[6,5]]) @@ -7612,8 +7610,7 @@ nullあるいは空の配列の結合は無処理です。そうでない場合 Extracts the lower bound of the multirange (NULL if the multirange is empty or has no lower bound). --> -《マッチ度[83.898305]》多重範囲の下限を取り出します。(多重範囲が空か下限がない場合はNULLとなります。) -《機械翻訳》複数範囲の下部バウンドを抽出しますNULL複数範囲が空であるか、下部バウンドがない場合。 +多重範囲の下限を取り出します(多重範囲が空か下限がない場合はNULLとなります)。 lower('{[1.1,2.2)}'::nummultirange) @@ -8508,10 +8505,8 @@ NULLをスキップして、すべての入力値をJSON配列に収集します tid, xid8, and also arrays and composite types containing sortable data types. --> -《マッチ度[70.605187]》非NULL入力値の最大を計算します。 -数値、文字列、日時、列挙型およびinetintervalmoneyoidpg_lsntidxid8、およびこれらすべての配列でも同様に利用できます。 -《機械翻訳》NULL以外の入力値の最大値を計算します。 -byteainetintervalmoneyoidpg_lsntidxid8や、ソート可能なoid型を含む配列や複合型と同様に、任意の数値、TID、日付/時刻、列挙データで利用可能です。 +非NULL入力値の最大を計算します。 +数値、文字列、日時、列挙型およびbyteainetintervalmoneyoidpg_lsntidxid8、およびこれらすべての配列でも同様に利用できます。 -《マッチ度[70.605187]》非NULL入力値の最小を計算します。 -数値、文字列、日時、列挙型およびinetintervalmoneyoidpg_lsntidxid8、およびこれらすべての配列でも同様に利用できます。 -《機械翻訳》NULL以外の入力値の最小値を計算します。 -byteainetintervalmoneyoidpg_lsntidxid8や、ソート可能なoid型を含む配列や複合型と同様に、任意の数値、文字列、日付/時刻、列挙型で利用可能です。 +非NULL入力値の最小を計算します。 +数値、文字列、日時、列挙型およびbyteainetintervalmoneyoidpg_lsntidxid8、およびこれらすべての配列でも同様に利用できます。 -《機械翻訳》ロード可能モジュールのリストが戻され、現在サーバセッションにロードされます。 -module_名前およびバージョンフィールドは、モジュール作者提供されるがPG_MODULE_MAGIC_EXTマクロを使用して値を決定しないかぎりNULLです。 -file_nameフィールドはモジュール(共有ライブラリ)のファイルの名前を示します。 +現在のサーバセッションにロードされているロード可能なモジュールの一覧を返します。 +module_nameフィールドとversionフィールドは、モジュール作成者がPG_MODULE_MAGIC_EXTマクロを使用して値を指定しない限り、NULLになります。 +file_nameフィールドは、モジュール(共有ライブラリ)のファイル名を示します。 @@ -1994,7 +1994,7 @@ SELECT * FROM pg_ls_dir('.') WITH ORDINALITY AS t(ls,n); -《機械翻訳》サーバがNUMA真でコンパイルされている場合は、サポートを返します。 +サーバがNUMAサポート付きでコンパイルされている場合はtrueを返します。 @@ -2474,9 +2474,8 @@ SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); Allowable privilege types are SELECT and UPDATE. --> -《マッチ度[63.565891]》ユーザはスキーマに対する権限があるか? -可能な権限型はCREATEUSAGEです。 -《機械翻訳》ユーザにラージオブジェクトの権限はありますか?使用可能な権限タイプはSELECTおよびUPDATEです。 +ユーザはラージオブジェクトに対する権限があるか? +可能な権限型はSELECTUPDATEです。 @@ -2880,16 +2879,11 @@ PUBLIC仮想ロールは実在するロールのメンバには決してなれ or 'T' for TYPE or DOMAIN. --> -《マッチ度[81.978452]》ownerIdのOIDを持つロールに所属するtype型のオブジェクトのデフォルト権限を持つaclitem配列を作成します。 -これはオブジェクトのACL権限がnullであるときに想定されるアクセス権限を示します。 +ownerIdのOIDを持つロールに所属するtype型のオブジェクトのデフォルト権限を持つaclitem配列を作成します。 +これはオブジェクトのACL権限がNULLであるときに想定されるアクセス権限を示します。 (デフォルトアクセス権限についてはで述べています。) typeパラメータは以下のどれかでなければなりません。 'c'でCOLUMN、'r'でTABLEおよびテーブルに見えるオブジェクト、's'でSEQUENCE、'd'でDATABASE、'f'でFUNCTIONあるいはPROCEDURE、'l'でLANGUAGE、'L'でLARGE OBJECT、'n'でSCHEMA、'p'でPARAMETER、't'でTABLESPACE、'F'でFOREIGN DATA WRAPPER、'S'でFOREIGN SERVER、'T'でTYPEあるいはDOMAINを表します。 -《機械翻訳》oidownerIdを持つ配列に属するタイプタイプのデフォルトアクセス権限を保持するaclitemオブジェクトを構築します。 -これは、オブジェクトのACLエントリがNULLである場合に想定されるアクセス権限を表します。 -(デフォルトアクセス権限はに記載されています。) -パラメータは、COLUMNの場合は「c」、TABLEおよびテーブルに似たオブジェクトの場合は「r」、SEQUENCEの場合は「s」、DATABASEの場合は「d」、FUNCTIONまたはPROCEDUREの場合は「f」、LANGUAGEの場合は「l」、LARGE OBJECTの場合は「n」、SCHEMAの場合は「n」、の場合は「p」、の場合は「t」、FOREIGN DATA WRAPPERの場合は「F」、の場合は「S」、またはの場合は「T」のいずれかである必要があります。 -DOMAINロールPARAMETER FOREIGN SERVER TYPEタイプTABLESPACE @@ -4617,8 +4611,8 @@ GUCが存在しても表示するフラグがない場合、結果は空の配 by catalog OID, object OID and sub-object ID. This function returns NULL values for undefined objects. --> -《機械翻訳》カタログオブジェクト、オブジェクトoidおよびサブオブジェクトidで指定されたデータベースoidのACLが戻されます。 -この関数はNULL未定義オブジェクトの値を戻します。 +カタログOID、オブジェクトOID、およびサブオブジェクトIDで指定されたデータベースオブジェクトのACLを返します。 +この関数は、未定義のオブジェクトに対してはNULL値を返します。 @@ -4775,8 +4769,8 @@ GUCが存在しても表示するフラグがない場合、結果は空の配 specific catalogs. For example, to retrieve all the granted privileges on objects in the current database: --> -《機械翻訳》pg_get_aclは、特定のカタログを参照せずに、データベースオブジェクトに関連付けられた権限を取得および検査する場合に便利です。 -例の場合、現在データベースのオブジェクトに付与されたすべての権限を取得するには、次のようにします。 +pg_get_aclは、特定のカタログを参照せずにデータベースオブジェクトに関連する権限を取得および検査するのに役立ちます。 +たとえば、現在のデータベース内のオブジェクトに付与されているすべての権限を取得するには次のようにします。 postgres=# SELECT (pg_identify_object(s.classid,s.objid,s.objsubid)).*, @@ -6162,7 +6156,7 @@ OIDとそれを含むシステム型で指定されるデータベース共有 - バージョン情報関数 + バージョン情報関数 @@ -6543,7 +6537,8 @@ WAL要約処理が現在動作している場合、pending_lsnnew_value, but as settings cannot be null, it is interpreted as a request to reset the setting to its default value. --> -《機械翻訳》set_confignew_valueのNULL値を受け入れますが、設定をNULLにすることはできないため、リセットへのリクエストとして解釈され、設定はそのデフォルト値になります。 +set_confignew_valueに対してNULL値を受け入れます。 +しかし、設定値をNULLにすることはできないため、設定をデフォルト値にリセットする要求として解釈されます。 set_config('log_statement_stats', 'off', false) @@ -6636,13 +6631,10 @@ WAL要約処理が現在動作している場合、pending_lsn -《マッチ度[55.165692]》指定したプロセスIDを持つバックエンドプロセスの現在のセッションの問い合わせを取り消します。 +指定したプロセスIDを持つバックエンドプロセスの現在のセッションの問い合わせを取り消します。 呼び出し側のロールがキャンセルされるバックエンドのロールのメンバであるか、pg_signal_backendの権限を与えられている場合に実行できます。 ただし、スーパーユーザのバックエンドはスーパーユーザのみが取り消せます。 -《機械翻訳》指定された問い合わせを持つバックエンドプロセスを持つセッションの現在process idを取り消します。 -これは、呼び出し元のロールが、バックエンドを取り消すロールのメンバである場合、または呼び出し元のロールがの権限を持つ場合にも許可されますpg_signal_backendただし、キャンセルスーパーユーザバックエンドを使用できるのはスーパーユーザのみです。 -例外として、の権限を持つ役割はキャンセルオートバキュームワーカープロセスに使用でき、それ以外の場合はスーパーユーザバックエンドと見なされます。 -pg_signal_autovacuum_worker +例外として、pg_signal_autovacuum_workerの権限を持つロールは、スーパーユーザのバックエンドともみなされる自動バキュームワーカープロセスをキャンセルすることが許可されています。 @@ -6738,13 +6730,10 @@ WAL要約処理が現在動作している場合、pending_lsn -《マッチ度[53.677932]》バックエンドが指定したプロセスIDを持つセッションを終了させます。 +バックエンドが指定したプロセスIDを持つセッションを終了させます。 呼び出し側のロールが終了されるバックエンドのロールのメンバであるか、pg_signal_backendの権限を与えられている場合に実行できます。 ただし、スーパーユーザのバックエンドはスーパーユーザのみが終了できます。 -《機械翻訳》指定されたセッションを持つバックエンドプロセスのprocess idを終了させます。 -これは、呼び出し元のロールが終了されるバックエンドを持つロールのメンバである場合や、呼び出し元のロールが以下の権限を持つ場合にも許可されますpg_signal_backendただし、スーパーユーザバックエンドを終了できるのはスーパーユーザのみです。 -例外として、以下の権限を持つ役割はオートバキュームワーカープロセスを終了させることができ、それ以外の場合はスーパーユーザバックエンドとみなされます。 -pg_signal_autovacuum_worker +例外として、pg_signal_autovacuum_workerの権限を持つロールは、スーパーユーザのバックエンドともみなされる自動バキュームワーカープロセスを終了させることが許可されています。 -《マッチ度[59.310345]》指定した外部名でレプリケーション起点を作成し、割り当てられた内部IDを返します。 -《機械翻訳》指定された外部名前でレプリケーション・オリジンを作成し、内部IDアサインを戻します。 +指定した外部名でレプリケーション起点を作成し、割り当てられた内部IDを返します。 名前は512バイト以下である必要があります。 @@ -8868,14 +8856,10 @@ bgwriterやcheckpointerがログするのを待たずに、実行中のトラン is associated with the given values, or if dealing with a temporary relation. --> -《マッチ度[77.858881]》与えられたテーブル空間OIDとファイルノードに格納されているリレーションのOIDを返します。 +与えられたテーブル空間OIDとファイルノードに格納されているリレーションのOIDを返します。 これは本質的にpg_relation_filepathの逆マッピングです。 データベースのデフォルトテーブル空間内のテーブルに対しては、テーブル空間は0と指定できます。 -当たられた値に対応する現在のデータベースにリレーションがなければNULLを返します。 -《機械翻訳》リレーションのoidと、そのテーブルスペースのoidが格納されているファイルノードを指定して、そのマッピングを戻します。 -これは基本的に、pg_relation_filepathの逆リレーションです。 -データベースのデフォルトテーブルスペースにあるの場合、テーブルスペースはゼロと指定できます。 -NULL現在データベースのリレーションが指定された値に関連付けられていない場合、または一時的リレーションを処理している場合に戻します。 +指定された値に対応する現在のデータベースにリレーションがない、または一時的なリレーションとして扱われている場合はNULLを返します。 @@ -9007,7 +8991,7 @@ bgwriterやcheckpointerがログするのを待たずに、実行中のトラン manipulate statistics. These functions cannot be executed during recovery. --> -《機械翻訳》には、統計処理の操作に使用される関数がリストされます。 +に統計情報の操作に使用される関数の一覧を示します。 これらの関数はリカバリ中には実行できません。 @@ -9017,13 +9001,16 @@ bgwriterやcheckpointerがログするのを待たずに、実行中のトラン VACUUM or ANALYZE) and should be considered temporary. --> -《機械翻訳》これらの統計処理操作機能によって行われた変更は、オートバキューム(またはマニュアルVACUUMまたはANALYZE)によって上書きされる可能性が高く、一時的とみなされるべきである。 +これらの統計情報操作関数による変更は、autovacuum(または手動のVACUUMまたはANALYZE)によって上書きされる可能性があるため、一時的なものとみなすべきでしょう。
+ + データベースオブジェクト統計情報操作関数 @@ -9061,9 +9048,9 @@ bgwriterやcheckpointerがログするのを待たずに、実行中のトラン restore to enable the optimizer to choose better plans if ANALYZE has not been run yet. --> -《機械翻訳》テーブル-レベル統計処理を更新します。 -通常、これらの統計処理は自動的に収集されるか、またはのパートとして更新されるため、この関数を呼び出しする必要はありません。 -ただし、ANALYZEまだ実行されていない場合リストア後にオプティマイザがより適切な計画を選択できるようにすると便利です。 +テーブルレベルの統計情報を更新します。 +通常、これらの統計情報は自動的に収集されるか、またはの一部として更新されるため、この関数を呼び出す必要はありません。 +ただし、リストア後にANALYZEがまだ実行されていない場合に、オプティマイザがより適切な計画を選択できるようにするために有用です。 -《機械翻訳》追跡される統計処理はバージョンからバージョンに変更される可能性があるため、引数はargnameargvalueフォームでは:のペアとして渡されます。 +追跡される統計情報はバージョンごとに変わる可能性があるため、引数はargnameargvalueのペアとして次の形式で渡されます。 SELECT pg_restore_relation_stats( 'arg1name', 'arg1value'::arg1type, @@ -9085,7 +9072,7 @@ SELECT pg_restore_relation_stats( reltuples values for the table mytable: --> -《機械翻訳》例の場合は、テーブルのrelpagesおよびreltuplesmytable:. +例えば、テーブルmytablerelpagesおよびreltuplesの値を設定するには次のようにします。 SELECT pg_restore_relation_stats( 'schemaname', 'myschema', @@ -9108,9 +9095,9 @@ SELECT pg_restore_relation_stats( of type integer, and relallfrozen with a value of type integer. --> -《機械翻訳》引数schemanameおよびrelnameは必須で、テーブルを指定します。 -他の引数はpg_統計処理内の特定の列に対応するクラスの名前と値です。 -現在サポートされているリレーション統計処理はrelpages値がタイプintegerreltuples値がタイプrealrelallvisible値がタイプintegerrelallfrozen値がタイプintegerです。 +引数schemanamerelnameは必須であり、テーブルを指定します。 +その他の引数は、pg_classの列に対応する統計情報の名前と値です。 +現在サポートされているリレーション統計情報は、integer型の値を持つrelpagesreal型の値を持つreltuplesinteger型の値を持つrelallvisible、およびinteger型の値を持つrelallfrozenです。 -《機械翻訳》また、この関数は引数名前versionタイプintegerも通っており、統計処理の起点となったサーババージョンを示している。 -これは、古いバージョンのPostgreSQLから統計処理を移植する際に役立つと期待されています。 +さらに、この関数は、統計情報取得元のサーババージョンを指定するinteger型の引数名versionを受け入れます。 +これは、古いバージョンのPostgreSQLから統計情報を引き継ぐ際に役立つことが期待されています。 -《機械翻訳》マイナーのエラーはとして報告されWARNINGそして無視され、残りの統計処理はリストアされます。 -指定されたすべての統計処理が正常にリストアされた場合、true,それ以外の場合false. +軽微なエラーはWARNINGとして報告されて無視され、残りの統計情報を引き続き復元します。 +指定されたすべての統計情報が正常に復元された場合はtrueを返し、それ以外の場合はfalseを返します。 -《機械翻訳》発信者は、テーブルのMAINTAIN権限を持っているか、データベースの所有者である必要があります。 +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -9157,14 +9144,14 @@ SELECT pg_restore_relation_stats( Clears table-level statistics for the given relation, as though the table was newly created. --> -《機械翻訳》統計処理が新しく作成されたかのように、指定したリレーションのテーブル-レベルテーブルをクリアします。 +テーブルが新しく作成されたかのように、指定されたリレーションに対するテーブルレベルの統計情報を空にします。 -《機械翻訳》発信者は、テーブルのMAINTAIN権限を持っているか、データベースの所有者である必要があります。 +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -9187,9 +9174,9 @@ SELECT pg_restore_relation_stats( restore to enable the optimizer to choose better plans if ANALYZE has not been run yet. --> -《機械翻訳》カラム-レベル統計処理を作成または更新します。 -通常、これらの統計処理は自動的に収集されるか、またはのパートとして更新されるため、この関数を呼び出しする必要はありません。 -ただし、ANALYZEまだ実行されていない場合は、リストア後にオプティマイザがより適切な計画を選択できるようにすると便利です。 +列レベルの統計情報を作成または更新します。 +通常、これらの統計情報は自動的に収集されるか、またはの一部として更新されるため、この関数を呼び出す必要はありません。 +ただし、リストア後にANALYZEがまだ実行されていない場合に、オプティマイザがより適切な計画を選択できるようにするために有用です。 -《機械翻訳》追跡される統計処理はバージョンからバージョンに変更される可能性があるため、引数はargnameargvalueフォームでは:のペアとして渡されます。 +追跡される統計情報はバージョンごとに変わる可能性があるため、引数はargnameargvalueのペアとして次の形式で渡されます。 SELECT pg_restore_attribute_stats( 'arg1name', 'arg1value'::arg1type, @@ -9212,7 +9199,7 @@ SELECT pg_restore_attribute_stats( col1 of the table mytable: --> -《機械翻訳》例の場合、col1テーブルmytable:の属性のavg_widthおよびNULL_fracの値を設定します。 +たとえば、テーブルmytableの属性col1avg_widthおよびnull_fracの値を設定するには、次のようにします。 SELECT pg_restore_attribute_stats( 'schemaname', 'myschema', @@ -9235,8 +9222,8 @@ SELECT pg_restore_attribute_stats( values of statistics corresponding to columns in pg_stats. --> -《機械翻訳》必須の引数は、テーブルを指定するschemanameおよびrelname値がタイプtextの場合、カラムを指定するattname値がタイプtextの場合またはattnum値がタイプsmallintの場合、および統計処理includeが子テーブルの値であるかどうかを指定するinheritedです。 -その他の引数はpg_statsの列に対応する統計処理の名前と値です。 +必要な引数は、テーブルを指定するtext型の値を持つschemanamerelname、列を指定するtext型の値を持つattnameまたはsmallint型の値を持つattnum、および統計情報に子テーブルの値を含めるかどうかを指定するinheritedです。 +その他の引数は、pg_statsの列に対応する統計情報の名前と値です。 -《機械翻訳》また、この関数は引数名前versionタイプintegerも通っており、統計処理の起点となったサーババージョンを示している。 -これは、古いバージョンのPostgreSQLから統計処理を移植する際に役立つと期待されています。 +さらに、この関数は、統計情報取得元のサーババージョンを指定するinteger型の引数名versionを受け入れます。 +これは、古いバージョンのPostgreSQLから統計情報を移植する際に役立つことが期待されています。 -《機械翻訳》マイナーのエラーはとして報告されWARNINGそして無視され、残りの統計処理はリストアされます。 -指定されたすべての統計処理が正常にリストアされた場合、true,それ以外の場合false. +軽微なエラーはWARNINGとして報告されて無視され、残りの統計情報を引き続き復元します。 +指定されたすべての統計情報が正常に復元された場合はtrueを返し、それ以外の場合はfalseを返します。 -《機械翻訳》発信者は、テーブルのMAINTAIN権限を持っているか、データベースの所有者である必要があります。 +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -9287,14 +9274,14 @@ SELECT pg_restore_attribute_stats( Clears column-level statistics for the given relation and attribute, as though the table was newly created. --> -《機械翻訳》統計処理が新しく作成されたかのように、指定したリレーションおよび属性のカラム-レベルテーブルをクリアします。 +テーブルが新しく作成されたかのように、指定されたリレーションと属性に対する列レベルの統計情報を空にします。 -《機械翻訳》発信者は、テーブルのMAINTAIN権限を持っているか、データベースの所有者である必要があります。 +呼び出し元は、テーブルに対するMAINTAIN権限を持っているか、データベースの所有者である必要があります。 @@ -9858,10 +9845,8 @@ SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size (pg_wal/summaries). Filenames beginning with a dot, directories, and other special files are excluded. --> -《マッチ度[75.819672]》WALアーカイブステータスディレクトリ(pg_wal/archive_status)内の各ファイルについて、名前、サイズ、最終更新時刻(mtime)を返します。 -ドットで始まるファイル名、ディレクトリ名その他の特殊なファイルは含まれません。 -《機械翻訳》名前のWAL要約サイズ(pg_wal/summaries内の各通常のファイルのサーバ、ディレクトリ、最終更新時刻(mtime)を返します。 -ドットで始まるファイル名、ディレクトリ、その他の特殊ファイルは除外されます。 +サーバのWAL要約ディレクトリ(pg_wal/summaries)内の各ファイルについて、名前、サイズ、および最終更新時間(mtime)を返します。 +ドットで始まるファイル名、ディレクトリ、その他の特殊ファイルは含まれません。