互換性オプション¶
このセクションで説明する構成パラメーターは、さまざまなデータベース互換機能を制御します。
edb_redwood_date¶
Parameter Type: ブール
Default Value: false
Range: {true|false}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
コマンドの列のデータ型として DATE が表示される場合、構成パラメーター edb_redwood_date が TRUE に設定されている場合、テーブル定義がデータベースに保存されるときに TIMESTAMP に変換されます。したがって、時間コンポーネントも日付とともに列に格納されます。
edb_redwood_date が FALSE に設定されている場合、 CREATE TABLE または ALTER TABLE コマンドの列のデータ型はネイティブPostgreSQLの DATE データ型のままになり、データベースにそのまま格納されます。PostgreSQLの DATE データ型は、列に時間コンポーネントのない日付のみを格納します。
edb_redwood_date の設定に関係なく、 DATE がSPL宣言セクションの変数のデータ型、SPLプロシージャまたはSPLの仮パラメータのデータ型など、他のコンテキストでデータ型として表示される場合関数、またはSPL関数の戻り値型は、常に内部的に TIMESTAMP に変換されるため、存在する場合は時間コンポーネントを処理できます。
edb_redwood_greatest_least¶
Parameter Type: ブール
Default Value: true
Range: {true|false}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
GREATEST 関数は、パラメーターのリストから最大値を持つパラメーターを返します。 LEAST 関数は、パラメーターのリストから最小の値を持つパラメーターを返します。
edb_redwood_greatest_least が TRUE に設定されている場合、パラメータの少なくとも1つがnullの場合、 GREATEST および LEAST 関数はnullを返します。
SET edb_redwood_greatest_least TO on;
SELECT GREATEST(1, 2, NULL, 3);
greatest
----------
(1 row)
edb_redwood_greatest_least が FALSE に設定されている場合、すべてのパラメーターがnullの場合を除き、nullパラメーターは無視されます。その場合、関数によってnullが返されます。
SET edb_redwood_greatest_least TO off;
SELECT GREATEST(1, 2, NULL, 3);
greatest
----------
3
(1 row)
SELECT GREATEST(NULL, NULL, NULL);
greatest
----------
(1 row)
edb_redwood_raw_names¶
Parameter Type: ブール
Default Value: false
Range: {true|false}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
edb_redwood_raw_names がデフォルト値の FALSE に設定されている場合、Redwoodカタログから表示すると、テーブル名、列名、トリガー名、プログラム名、ユーザー名などのデータベースオブジェクト名が大文字で表示されます(つまり、 ALL_ 、 DBA_ 、または USER_ のプレフィックスが付いたシステムカタログ)。さらに、引用符は、引用符で囲まれて作成された名前を囲みます。
edb_redwood_raw_names を TRUE に設定すると、データベースオブジェクト名は、Redwoodカタログから表示したときにPostgreSQLシステムカタログに保存されているとおりに表示されます。したがって、引用符で囲まずに作成された名前は、PostgreSQLで期待されるように小文字で表示されます。引用符で囲まれて作成された名前は、作成されたとおりに表示されますが、引用符は表示されません。
たとえば、次のユーザー名が作成され、そのユーザーとのセッションが開始されます。
CREATE USER reduser IDENTIFIED BY password;
edb=# \c - reduser
Password for user reduser:
You are now connected to database "edb" as user "reduser".
reduserとしてデータベースに接続すると、次のテーブルが作成されます。
CREATE TABLE all_lower (col INTEGER);
CREATE TABLE ALL_UPPER (COL INTEGER);
CREATE TABLE "Mixed_Case" ("Col" INTEGER);
Redwoodカタログ USER_TABLES から表示すると、 edb_redwood_raw_names がデフォルト値 FALSE に設定されているため、 Mixed_Case 名を除き、名前は大文字で表示されます。
edb=> SELECT * FROM USER_TABLES;
schema_name | table_name | tablespace_name | status | temporary
--------------+--------------+------------------+---------+-----------
REDUSER | ALL_LOWER | | VALID | N
REDUSER | ALL_UPPER | | VALID | N
REDUSER | "Mixed_Case" | | VALID | N
(3 rows)
edb_redwood_raw_names を TRUE に設定して表示すると、作成時に表示される Mixed_Case 名を除き、名前は小文字で表示されますが、引用符は含まれません。
edb=> SET edb_redwood_raw_names TO true;
SET
edb=> SELECT * FROM USER_TABLES;
schema_name | table_name | tablespace_name | status | temporary
-------------+------------+------------------+--------+-----------
reduser | all_lower | | VALID | N
reduser | all_upper | | VALID | N
reduser | Mixed_Case | | VALID | N
(3 rows)
これらの名前は、PostgreSQLの pg_tables カタログから見ると大文字と小文字が一致するようになりました。
edb=> SELECT schemaname, tablename, tableowner FROM pg_tables WHERE
tableowner = 'reduser';
schemaname | tablename | tableowner
------------+------------+------------
reduser | all_lower | reduser
reduser | all_upper | reduser
reduser | Mixed_Case | reduser
(3 rows)
edb_redwood_strings¶
Parameter Type: ブール
Default Value: false
Range: {true|false}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
edb_redwood_strings パラメーターが TRUE に設定されている場合、ストリングがヌル変数またはヌル列と連結されると、結果は元のストリングになります。 edb_redwood_strings が FALSE に設定されている場合、ネイティブのPostgreSQLの動作が維持されます。これは、文字列とヌル変数またはヌル列の連結によりヌル結果が得られることです。
次の例は、違いを示しています。
サンプルアプリケーションには、従業員のテーブルが含まれています。このテーブルには、ほとんどの従業員にとってヌルである comm という名前の列があります。次のクエリは、 edb_redwood_string を FALSE に設定して実行されます。NULL列と空でない文字列を連結すると、最終結果としてNULLが生成されるため、クエリ結果には手数料のある従業員のみが表示されます。他のすべての従業員の出力行はヌルです。
SET edb_redwood_strings TO off;
SELECT RPAD(ename,10) || ' ' || TO_CHAR(sal,'99,999.99') || ' ' ||
TO_CHAR(comm,'99,999.99') "EMPLOYEE COMPENSATION" FROM emp;
EMPLOYEE COMPENSATION
----------------------------------
ALLEN 1,600.00 300.00
WARD 1,250.00 500.00
MARTIN 1,250.00 1,400.00
TURNER 1,500.00 .00
(14 rows)
以下は、 edb_redwood_strings が TRUE に設定されている場合に実行される同じクエリです。ここでは、NULL列の値は空の文字列として扱われます。空の文字列と空でない文字列を連結すると、空でない文字列が生成されます。
SET edb_redwood_strings TO on;
SELECT RPAD(ename,10) || ' ' || TO_CHAR(sal,'99,999.99') || ' ' ||
TO_CHAR(comm,'99,999.99') "EMPLOYEE COMPENSATION" FROM emp;
EMPLOYEE COMPENSATION
----------------------------------
SMITH 800.00
ALLEN 1,600.00 300.00
WARD 1,250.00 500.00
JONES 2,975.00
MARTIN 1,250.00 1,400.00
BLAKE 2,850.00
CLARK 2,450.00
SCOTT 3,000.00
KING 5,000.00
TURNER 1,500.00 .00
ADAMS 1,100.00
JAMES 950.00
FORD 3,000.00
MILLER 1,300.00
(14 rows)
edb_stmt_level_tx¶
Parameter Type: ブール
Default Value: false
Range: {true|false}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
statement level transaction isolation という用語は、SQLコマンドで実行時エラーが発生したときに、その単一のコマンドによって引き起こされたデータベース上のすべての更新がロールバックされる動作を示します。たとえば、単一の UPDATE コマンドが5行を正常に更新したが、6行目を更新しようとすると例外が発生した場合、この UPDATE コマンドによって行われた6行すべての更新はロールバックされます。まだコミットまたはロールバックされていない以前のSQLコマンドの効果は、 COMMIT または ROLLBACK コマンドが実行されるまで保留されます。
AdvancedServerでは、SQLコマンドの実行中に例外が発生すると、トランザクションの開始以降のデータベース上のすべての更新がロールバックされます。さらに、トランザクションは中止状態のままになり、別のトランザクションを開始する前に COMMIT または ROLLBACK コマンドを発行する必要があります。
edb_stmt_level_tx が TRUE に設定されている場合、例外は以前のコミットされていないデータベース更新を自動的にロールバックしません。 edb_stmt_level_tx が FALSE に設定されている場合、例外はコミットされていないデータベースの更新をロールバックします。
注釈
パフォーマンスに悪影響を与える可能性があるため、絶対に必要な場合にのみ edb_stmt_level_tx を TRUE に設定してください。
PSQLで実行される次の例は、 edb_stmt_level_tx が FALSE の場合、2番目の INSERT コマンドの中止によって最初の INSERT コマンドもロールバックされることを示しています。PSQLでは、コマンド /set AUTOCOMMIT off を発行する必要があることに注意してください。そうしないと、すべてのステートメントが自動的にコミットし、 edb_stmt_level_tx の効果のこのデモの目的に反します。
\set AUTOCOMMIT off
SET edb_stmt_level_tx TO off;
INSERT INTO emp (empno,ename,deptno) VALUES (9001, 'JONES', 40);
INSERT INTO emp (empno,ename,deptno) VALUES (9002, 'JONES', 00);
ERROR: insert or update on table "emp" violates foreign key constraint
"emp_ref_dept_fk"
DETAIL: Key (deptno)=(0) is not present in table "dept".
COMMIT;
SELECT empno, ename, deptno FROM emp WHERE empno > 9000;
empno | ename | deptno
-------+-------+--------
(0 rows)
次の例では、 edb_stmt_level_tx が TRUE に設定されているため、最初の INSERT コマンドは、2番目の INSERT コマンドのエラー後にロールバックされていません。この時点で、最初のINSERTコマンドはコミットまたはロールバックできます。
\set AUTOCOMMIT off
SET edb_stmt_level_tx TO on;
INSERT INTO emp (empno,ename,deptno) VALUES (9001, 'JONES', 40);
INSERT INTO emp (empno,ename,deptno) VALUES (9002, 'JONES', 00);
ERROR: insert or update on table "emp" violates foreign key constraint
"emp_ref_dept_fk"
DETAIL: Key (deptno)=(0) is not present in table "dept"
SELECT empno, ename, deptno FROM emp WHERE empno > 9000;
empno | ename | deptno
-------+-------+--------
9001 | JONES | 40
(1 row)
COMMIT;
COMMIT コマンドの代わりに ROLLBACK コマンドが発行された場合、従業員番号 9001 の挿入もロールバックされます。
db_dialect¶
Parameter Type: 列挙
Default Value: postgres
Range: {postgres|レッドウッド}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
ネイティブPostgreSQLシステムカタログ pg_catalog に加えて、AdvancedServerには拡張カタログビューが含まれています。これは、展開されたカタログビューの sys カタログです。 db_dialect パラメータは、これらのカタログが名前解決のために検索される順序を制御します。
postgres に設定すると、ネームスペースの優先順位は pg_catalog 、 sys となり、PostgreSQLカタログに最高の優先順位が与えられます。 redwood に設定すると、ネームスペースの優先順位は sys 、 pg_catalog となり、展開されたカタログビューの優先順位が最も高くなります。
default_with_rowids¶
Parameter Type: ブール
Default Value: false
Range: {true|false}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
on に設定すると、 CREATE TABLE には新しく作成されたテーブルに ROWID 列が含まれ、SQLコマンドで参照できます。AdvancedServerの以前のバージョンでは ROWIDs は OIDs にマッピングされていましたが、AdvancedServerバージョン12以降では、 ROWID は1で始まり、テーブルの各行に割り当てられたシーケンスに基づく自動インクリメント値です ROWIDs オプションで作成。デフォルトでは、 ROWID 列に一意のインデックスが作成されます。
ALTER および DROP 操作は ROWID 列で制限されています。
AdvancedServer11以前のバージョンから ROWIDs でデータベースを復元するには、次を実行する必要があります。
pg_dump:テーブルに
OIDsが含まれている場合、--convert-oids-to-rowidsを指定してデータベースをダンプします。それ以外の場合は、OIDsを無視して、AdvancedServerバージョン12以降でテーブル作成を続行します。pg_upgrade:エラーが発生しました。ただし、テーブルに
OIDsまたはROWIDsが含まれている場合は、次の手順を実行する必要があります。--convert-oids-to-rowidsオプションを指定して、テーブルのダンプを取得します。テーブルを削除してから、アップグレードを実行します。
アップグレードが正常に完了したら、ダンプをターゲットデータベースにダンプされたテーブルを含む新しいクラスターに復元します。
optimizer_mode¶
Parameter Type: 列挙
Default Value: を選択
Range: {選択|ALL_ROWS|FIRST_ROWS|FIRST_ROWS_10|FIRST_ROWS_100|FIRST_ROWS_1000}
Minimum Scope of Effect: セッションごと
When Value Changes Take Effect: 即時
Required Authorization to Activate: セッションユーザー
オプティマイザーのヒントを分析するためのデフォルトの最適化モードを設定します。
次の表は、可能な値を示しています。
ヒント |
説明 |
ALL_ROWS |
結果セットのすべての行の取得用に最適化します。 |
選ぶ |
結果セットから取得されると想定される行数に基づくデフォルトの最適化を行いません。これがデフォルトです。 |
FIRST_ROWS |
結果セットの最初の行のみを取得するように最適化します。 |
FIRST_ROWS_10 |
結果セットの最初の10行の取得のために最適化します。 |
FIRST_ROWS_100 |
結果セットの最初の100行を取得するために最適化します。 |
FIRST_ROWS_1000 |
結果セットの最初の1000行の取得のために最適化します。 |
これらの最適化モードは、SQLコマンドを送信するクライアントが結果セットの最初の n 行のみを表示し、結果セットの残りを破棄するという前提に基づいています。クエリに割り当てられたリソースは、そのように調整されます。