すべてのプロダクト
Search
ドキュメントセンター

Hologres:Hologres SQL ステートメントに関するよくある質問

最終更新日:Aug 19, 2026

このトピックでは、Hologres SQL の一般的なエラーコードとその原因および解決策を一覧表示します。

HG_ERRCODE_FDW_ERROR

エラー:failed to import foreign schema from odps: Can't find file system factory

  • 原因:構成エラーにより、Hologres が MaxCompute テーブルのファイルシステムにアクセスできません。

  • 解決策:外部サーバーと外部テーブルの構成を確認してください。または、データを Hologres の内部テーブルにインポートしてください。

ERRCODE_FDW_ERROR

エラー:Failed to import foreign schema from ODPS: Authorization Failed: xxx

  • 原因:現在のアカウントには、指定された MaxCompute テーブルに対する必要な権限がありません。

  • 解決策:MaxCompute でアカウントに必要な権限を付与してください。詳細については、「コマンドを使用したユーザー権限の管理」をご参照ください。

エラー:failed to import foreign schema from odps:Table not found -xxx

  • 原因:指定されたテーブルが MaxCompute に存在しません。

  • 解決策:MaxCompute でテーブル名とプロジェクトが正しいことを確認してください。

ERRCODE_UNIQUE_VIOLATION または primary key violation

エラー: キー (id)=(xxxx) を持つ行が複数回更新されたか、または重複したキー値が一意性制約に違反しています

  • 原因:書き込まれるデータに重複したプライマリキー値が含まれており、一意性制約に違反しています。

  • 解決策:

    • INSERT ステートメントでエラーが発生した場合は、INSERT INTO xx ON CONFLICT 構文を使用してプライマリキーを重複排除します。詳細については、「INSERT ON CONFLICT (UPSERT)」をご参照ください。

    • INSERT...ON CONFLICT ステートメントでこのエラーが発生した場合、ソースデータ自体に重複したプライマリキーが含まれています。詳細については、「一般的なエラー」をご参照ください。

    • このエラーは、テーブルの存続時間 (TTL) が期限切れになり、期限切れのデータがまだ物理的に削除されていない場合にも発生する可能性があります。この場合、hg_remove_duplicated_pk 関数を使用して重複データをクリーンアップします。詳細については、「一般的なエラー」をご参照ください。

ERRCODE_CHECK_VIOLATION または partition constraint

エラー:ERROR: new row for relation violates partition constraint

  • 原因:子パーティションテーブルに挿入されるデータが、パーティション値の定義と一致しません。たとえば、「20240110」用に定義されたパーティションに「20240110」以外のパーティション値を持つ行を挿入すると、このエラーが発生します。例:

    CREATE TABLE public.tbl_20240110 PARTITION OF public.tbl FOR VALUES IN('20240110');
    
    INSERT INTO public.tbl_20240110 SELECT * FROM odps_tbl where sale_date >'20240110';
    
    error: new row for relation "tbl_20240110" violates partition constraint
    
  • 解決策:子パーティションテーブルに書き込むデータがパーティション制約を満たしていることを確認してください。

ERRCODE_NOT_NULL_VIOLATION または not-null constraint または UsageProblem

エラー:null value in column "xxx" violates not-null constraint

  • 原因:NOT NULL 制約を持つ列に NULL 値が書き込まれました。

  • 解決策:その列に NULL 値を含む行を削除してから、書き込み操作をリトライしてください。

ERRCODE_UNDEFINED_TABLE

エラー:Dispatch query failed: Table not found

  • 原因:テーブルが存在しません。これは通常、テーブルが最近作成されてメタデータがまだ伝播していない場合、またはクエリの実行中にテーブルに対して TRUNCATE または DROP 操作が実行された場合に発生します。

  • 解決策:HoloWeb の Query Insight を使用して、TRUNCATE や DROP などの同時 DDL 操作がないか確認してください。競合を解決してから、クエリをリトライしてください。アクティブにクエリされているテーブルに対して DDL 操作を実行しないでください。詳細については、「Query Insight」をご参照ください。

ERRCODE_QUERY_CANCELED またはクエリはキャンセルされました

エラー:ERROR: canceling statement due to statement timeout

  • 原因:クエリの実行時間が、クライアントで設定されたステートメントタイムアウトを超えました。

  • 解決策:クエリを最適化して実行時間を短縮するか、タイムアウト時間を延長してください。タイムアウト設定の詳細については、「クエリの管理」をご参照ください。

エラー:ERROR: Query:[xxx] Get result failed: canceling statement due to user request

  • 原因:クエリがキャンセルされました。通常、実行中にテーブルに対して DROP または TRUNCATE 操作が実行されたことが原因です。

  • 解決策:HoloWeb の Query Insight を使用して、競合する DDL 操作がないか確認してください。詳細については、「Query Insight」をご参照ください。クエリの実行中に DDL 操作を実行しないでください。

エラー: クエリがキャンセルされました。ストレージでインデックスのフル ID:xxx (テーブル ID: x、インデックス ID: x) が見つからないか、削除中です。

  • 原因:実行中に、クエリ対象のテーブルのいずれかに対して TRUNCATE または DROP 操作が実行されました。これによりテーブル ID が変更され、クエリがキャンセルされました。

  • 解決策:Query Insight を使用して、クエリと同時に TRUNCATE または DROP 操作が実行されたかどうかを確認してください。詳細については、「Query Insight」をご参照ください。

ERRCODE_FEATURE_NOT_SUPPORTED または Unsupported feature

エラー:Feature not supported: insert into parent table

  • 原因:Hologres は、親パーティションテーブルへの直接のデータ挿入をサポートしていません。

  • 解決策:代わりに、特定の子パーティションテーブルにデータを挿入してください。詳細については、「CREATE PARTITION TABLE」をご参照ください。

エラー:SELECT INTO is not supported now.

  • 原因:Hologres は SELECT INTO 構文をサポートしていません。

  • 解決策:INSERT INTO SELECT 構文を使用してデータを挿入してください。詳細については、「INSERT」をご参照ください。

エラー:ALTER TABLE CHANGE OWNER is not supported in SLPM (Schema-Level Permission Mode)

  • 原因:スキーマレベルの簡易権限モデル (SLPM) では、ALTER TABLE を使用してテーブルの所有者を変更することはできません。

  • 解決策:SLPM では、テーブルの所有者はユーザーグループです。ユーザーの権限を変更するには、ユーザーをユーザーグループから削除します。詳細については、「ユーザーグループからユーザーを削除する」をご参照ください。

エラー:Feature not supported: INSERT ON CONFLICT RETURNING

  • 原因:Hologres は INSERT ON CONFLICT RETURNING 構文をサポートしていません。

  • 解決策:RETURNING 句なしで INSERT ON CONFLICT 構文を使用してください。詳細については、「INSERT ON CONFLICT (UPSERT)」をご参照ください。

エラー:ERROR: INSERT in ddl transaction is not supported now

  • 原因:デフォルトでは、Hologres は BEGIN...COMMIT トランザクションブロック内の INSERT などの DML ステートメントをサポートしていません。例:

    BEGIN;
    INSERT xxx
    commit;
    ERROR: INSERT in ddl transaction is not supported now
  • 解決策:トランザクションの外で INSERT ステートメントを実行するか、DML トランザクションを有効にしてください。詳細については、「SQL トランザクション機能」をご参照ください。

エラー: バイナリログが有効になっていないテーブルを使用したパブリケーションの作成は、現在サポートされていません。

  • 原因:binlog が有効になっていないテーブルに対してパブリケーションが作成されました。パブリケーションは、データの変更をサブスクライブするために binlog を必要とします。

  • 解決策:パブリケーションを作成する前に、テーブルで binlog を有効にしてください。パブリケーションは、binlog が有効になっているテーブルに対してのみ作成できます。詳細については、「JDBC を使用して Hologres の binlog を消費する」をご参照ください。

エラー:Feature not supported: INSERT on conflict contains un-unique column

  • 原因:INSERT ON CONFLICT ステートメントの競合ターゲットが、プライマリキー以外の列を参照しています。

  • 解決策:INSERT ON CONFLICT の競合ターゲットは、プライマリキー列のみを参照する必要があります。

エラー:Feature not supported: UPDATE with shard keys

  • 原因:Hologres は、プライマリキーまたは分散キー列に対する UPDATE 操作をサポートしていません。

  • 解決策:プライマリキーまたは分散キー列を更新しないでください。これらの値を変更するには、古い行を DELETE し、新しい行を INSERT する必要があります。

エラー: 1925 年より前の時間はサポートされていません

  • 原因:時間関連の関数は、デフォルトで 1925 年から 2282 年の範囲をサポートしています。この範囲外の値はエラーを引き起こします。

  • 解決策:to_char、to_date、to_timestamp などの関数については、SQL ステートメントの前に hg_experimental_functions_use_pg_implementation GUC パラメーターを設定して、より広い時間範囲を有効にしてください。詳細については、「日付と時刻の関数」をご参照ください。

エラー: Group by キーに不正確な型はサポートされていません

  • 原因:GROUP BY 句が FLOAT などの不正確なデータ型の列を参照しています。

  • 解決策:GROUP BY 句では、FLOAT の代わりに正確なデータ型を使用してください。

エラー:CREATE TABLE is not supported for current instance

  • 原因:現在のインスタンスは共有クラスターインスタンス (エンドポイントが hgmc で始まる、例:hgmc-cn-xxwwwkkk) またはセカンダリインスタンスです。エンドポイントは Hologres コンソールで確認できます。共有クラスターインスタンスは外部テーブルのみをサポートし、内部テーブルはサポートしません。セカンダリインスタンスは読み取り専用です。

  • 解決策:

    • 共有クラスターインスタンスを使用する場合は、外部テーブル構文を使用して外部テーブルを作成してください。詳細については、「CREATE FOREIGN TABLE」をご参照ください。または、専用インスタンスを使用して内部テーブルを作成してください。

    • セカンダリインスタンスを使用する場合は、プライマリインスタンスでテーブルを作成する必要があります。

エラー: ALTER TABLE ALTER COLUMN SET TYPE は現在サポートされていません

  • 原因:Hologres は ALTER TABLE による列のデータ型の変更をサポートしていません。

  • 解決策:列の型を変更するには、目的の列の型でテーブルを再作成してください。

エラー: エラー: 現在、マテリアライズドビューでは、式に対する集計はサポートされていません。単一の列のみがサポートされています。

  • 原因:単一テーブルのマテリアライズドビューは、計算列に対する集計式をサポートしていません。

  • 解決策:単一テーブルのマテリアライズドビューで式を使用しないでください。単一列の集計のみを使用してください。詳細については、「SQL を使用したマテリアライズドビューの管理」をご参照ください。

エラー:ERROR: SELECT rule's target list has too few entries

  • 原因:リアルタイムマテリアライズドビューは、計算列に対する集計式をサポートしていません。

  • 解決策:リアルタイムマテリアライズドビューで式を使用しないでください。詳細については、「SQL を使用したマテリアライズドビューの管理」をご参照ください。

エラー:TransactionRowStore::DumpFlushDelta Not implemented

  • 原因:現在の Hologres バージョンには DELETE FROM table USING 構文に実装上の制限があり、このエラーが発生します。

  • 解決策:バッチ削除に USING 句を使用しないように SQL ステートメントを書き換えてください。代わりに次の構文を使用してください:

    DELETE FROM table WHERE (col1, col2) IN ((val1, val2), ...);

ERRCODE_UNDEFINED_OBJECT

エラー:column xxx does not exist

  • 原因:指定された列がテーブルに存在しません。

  • 解決策:SQL ステートメントの列名が正しいことを確認してください。

エラー:Table group xxx does not exist

  • 原因:指定されたテーブルグループが存在しません。

  • 解決策:テーブルを作成する際に既存のテーブルグループを指定するか、最初にテーブルグループを作成してください。

エラー: 指定されたパーティションは存在しません

  • 原因:このエラーは通常、データの書き込みまたは更新時に、ターゲットの子パーティションテーブルが存在しない場合に発生します。

  • 解決策:データを書き込む前に、必要な子パーティションを作成してください。

エラー:create binlog reader failed: Fail to find any shards, please check if the table group is in current virtual warehouse

  • 原因:指定されたテーブルグループが現在の仮想ウェアハウスにロードされていません。

  • 解決策:テーブルグループが仮想ウェアハウスにロードされていることを確認してください。ロードされていない場合は、仮想ウェアハウスを構成してロードしてください。詳細については、「仮想ウェアハウスにデータへのアクセスを承認する」をご参照ください。

ERRCODE_INSUFFICIENT_PRIVILEGE または permission denied

権限関連のエラーについては、次のトピックをご参照ください:

ERRCODE_OUT_OF_MEMORY または OOM

エラー: 既存の全クエリの合計メモリ使用量がメモリ制限を超えました

ERRCODE_DATATYPE_MISMATCH

エラー:internal error: Datasets has different schema

  • 原因:結合されるデータセット (例:UNION または INSERT...SELECT ステートメント) のスキーマが、列数、順序、またはデータ型で一致しません。

  • 解決策:ステートメントのすべての部分で、列数、順序、およびデータ型が一貫していることを確認してください。

ERRCODE_DIVISION_BY_ZERO

  • 原因:SQL ステートメントにゼロ除算が含まれています。

  • 解決策:

    • ゼロ除数を避けるか、CASE WHEN 式を使用してこのケースを処理してください。

    • MySQL 互換の拡張機能を作成し、ゼロ除算を許可するオプションを有効にしてください。詳細については、「MySQL から Hologres へのデータ移行」をご参照ください。

ERRCODE_STRING_DATA_RIGHT_TRUNCATION

エラー:value too long for type character varying(xxx)

  • 原因:データ値が、列に定義された character varying(n) の長さ制限を超えています。

  • 解決策:データを切り捨てるか変換するか、VARCHAR の長さ制限を増やすか、列の型を TEXT に変更してください。

ERRCODE_PROGRAM_LIMIT_EXCEEDED または Exceed Odps scan limit

エラー: 一致するパーティション数が xxx となり、パーティションの上限 512 を超えました。

  • 原因:クエリが MaxCompute 外部テーブルで 512 を超えるパーティションをスキャンしており、デフォルトの制限を超えています。

  • 解決策:パーティションフィルター条件を追加するか、次の GUC パラメーターを使用してパーティションスキャン制限を増やしてください。詳細については、「MaxCompute 統合に関するよくある質問」をご参照ください。

    set hg_foreign_table_max_partition_limit =xx;

エラー: ビルド記述の作成に失敗しました: スキャン制限の 200 GB を超えています。現在のスキャン xxx GB。

  • 原因:MaxCompute 外部テーブルでスキャンされたデータ量が 200 GB の制限を超えています。

  • 解決策:

    • フィルター条件を追加して、スキャンされるデータ量を減らしてください。

    • データを Hologres の内部テーブルにインポートしてください。内部テーブルにはスキャンサイズの制限はありません。

ERRCODE_SYNTAX_ERROR

エラー:syntax error at or near "xxxxx"

  • 原因:SQL ステートメントに構文エラーがあります。

  • 解決策:SQL 構文を確認し、修正してください。

ERRCODE_UNDEFINED_FUNCTION

エラー:DISTINCT is not implemented for window functions

  • 原因:Hologres は現在、ウィンドウ関数での DISTINCT キーワードをサポートしていません。

  • 解決策:ウィンドウ関数から DISTINCT キーワードを削除してください。

エラー:ERROR:function xxx does not exist

  • 原因:必要な拡張機能がインストールされていないか、関数呼び出しで無効な構文が使用されています。

  • 解決策:必要な拡張機能をインストールするか、関数の構文を修正してください。

エラー:ERROR: function jsonb_set(json, text[], jsonb, boolean) does not exist

  • 原因:引数の型が JSONB_SET 関数のシグネチャと一致しません。

  • 解決策:JSONB_SET の最初の引数が JSON ではなく JSONB 型であることを確認してください。詳細については、「JSON および JSONB データ型」をご参照ください。

ERRCODE_E_R_E_READING_SQL_DATA_NOT_PERMITTED

エラー: xxx に対する 'odps:Select' 権限がありません

  • 原因:現在のアカウントには、MaxCompute テーブルをクエリする権限がありません。

  • 解決策:MaxCompute でアカウントに必要な権限を付与してください。

エラー: 列 'xxx' の機密ラベルは 2 ですが、お客様の有効ラベルは 0 です

  • 原因:現在のアカウントは、MaxCompute テーブルの一部の列にしかアクセスできません。

  • 解決策:MaxCompute でより広範な列レベルの権限を付与するか、アクセス権のある列のみをクエリしてください。権限付与の詳細については、「コマンドを使用したユーザー権限の管理」をご参照ください。

ERRCODE_DUPLICATE_OBJECT

エラー: 拡張 "xxxxx" は既に存在します

  • 原因:指定された拡張機能がデータベースにすでに存在します。

  • 解決策:拡張機能はすでにインストールされています。操作は不要です。このエラーを回避するには、CREATE EXTENSION IF NOT EXISTS を使用してください。

ERRCODE_INVALID_TEXT_REPRESENTATION または invalid input

エラー:invalid input syntax for type numeric: \"\"

  • 原因:NUMERIC 列に、空の文字列など、数値として解析できない無効なデータが含まれています。

  • 解決策:ソースデータをクリーンアップして、NUMERIC 型に準拠するようにしてください。たとえば、空の文字列を NULL または 0 に変換します。

エラー:invalid input syntax for integer: xxx

  • 原因:INT 列に、整数として解析できないデータが含まれています。

  • 解決策:無効なデータをクリーンアップしてください。

ERRCODE_BAD_COPY_FILE_FORMAT

エラー:missing data for column "xxx". failed to query next

  • 原因:データファイルの形式が正しくありません。これは、データに COPY コマンドで指定された区切り文字 (カンマやスペースなど) が含まれている場合に発生し、列数の不一致が生じます。

  • 解決策:データをクリーンアップするか、データ値に含まれていない別の区切り文字を使用してください。

ERRCODE_UNDEFINED_COLUMN

エラー:ERROR: INSERT has more expressions than target columns

  • 原因:INSERT ステートメントの値の数が、ターゲットテーブルの列の数を超えています。

  • 解決策:INSERT ステートメントの値の数が、ターゲット列の数と一致することを確認してください。

ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE

エラー:bigint out of range

  • 原因:値が BIGINT 型の有効範囲を超えています。

  • 解決策:データが BIGINT の範囲 (-9223372036854775808 から 9223372036854775807) 内にあることを確認するか、より大きな値には NUMERIC 型を使用してください。

エラー:numeric field overflow in function round

  • 原因:NUMERIC 値が定義された精度制限を超えています。

  • 解決策:NUMERIC 列の精度を調整してデータに対応させるか、データをクリーンアップして定義された精度に合わせます。

ERRCODE_DATETIME_FIELD_OVERFLOW

エラー:InsertOverwrite insert select table data failed : column a.unsign_type does not exist

  • 原因:指定された列がテーブルに存在しないか、パラメーター名が正しくありません。

  • 解決策:SQL 構文を確認し、修正してください。

エラー:mismatched properties: table orientation is "column" but storage format is "sst"

  • 原因:テーブルのプロパティが一致しません。列指向ストレージが指定されましたが、ストレージ形式が互換性のない SST に設定されていました。

  • 解決策:SQL ステートメントを確認し、修正してください。

ERRCODE_INVALID_DATETIME_FORMAT

エラー: 「yyyy」の値「""」は無効です。値は整数である必要があります。

  • 原因:データが期待される日時形式に準拠していません。

  • 解決策:書き込む前に、データに有効な日時値が含まれていることを確認してください。

ERRCODE_CHARACTER_NOT_IN_REPERTOIRE

エラー:invalid byte sequence for encoding "UTF8": 0xe9 0x80

  • 原因:データに UTF-8 エンコーディングで無効な文字が含まれています。

  • 解決策:無効なデータをクリーンアップしてください。

ERRCODE_DUPLICATE_TABLE

エラー:relation "xxxx" already exists

  • 原因:指定されたテーブルがデータベースにすでに存在します。

  • 解決策:別のテーブル名を使用するか、CREATE TABLE IF NOT EXISTS を使用してエラーを回避してください。

ERRCODE_UNTRANSLATABLE_CHARACTER

エラー:character with byte sequence 0xe4 0x9e 0xab in encoding "UTF8" has no equivalent in encoding "GBK"

  • 原因:UTF-8 文字に、ターゲットの GBK エンコーディングで同等の文字がありません。

  • 解決策:無効なデータをクリーンアップしてください。

ERRCODE_GROUPING_ERROR

エラー:column "xxx" must appear in the GROUP BY clause or be used in an aggregate function

  • 原因:SELECT リスト内の非集計列が GROUP BY 句に含まれていません。SELECT リスト内のすべての列は、GROUP BY に出現するか、集計関数で使用される必要があります。

  • 解決策:列を GROUP BY 句に追加するか、集計関数で使用してください。

ERRCODE_INVALID_TRANSACTION_STATE

エラー: SET_TABLE_PROPERTY 文と CREATE TABLE 文が、テーブルに対して同じトランザクション内にありません

  • 原因:CREATE TABLE と call set_table_property ステートメントが同じトランザクション内にありません。

  • 解決策:CREATE TABLE とすべての call set_table_property ステートメントを同じトランザクションブロックでラップしてください。例:

    begin;
    CREATE TABLE tbl (
     xxxx
    );
    call set_table_property('tbl', 'orientation', 'xx');
    call set_table_property('tbl', 'distribution_key', 'xxx');
    commit;

ERRCODE_AMBIGUOUS_COLUMN

エラー:column reference "xxx" is ambiguous

  • 原因:JOIN クエリの列名が、複数のテーブルに存在するためあいまいです。たとえば、SELECT id FROM t1 INNER JOIN t2 ON t1.id=t2.id では、SELECT 句の idt1 または t2 のいずれかを参照する可能性があるため、あいまいです。

  • 解決策:列をテーブル名またはエイリアスで修飾してください (例:t1.id)。

ERRCODE_DUPLICATE_COLUMN

エラー:column "xxx" specified more than once

  • 原因:CREATE TABLE ステートメントで列名が複数回出現しています。

  • 解決策:CREATE TABLE ステートメントから重複した列を削除してください。

ERRCODE_AMBIGUOUS_FUNCTION

このエラーは、関数呼び出しが複数のオーバーロードに一致し、データベースがどれを使用するかを判断できない場合に発生します。これを解決するには、引数を目的のデータ型に明示的にキャストしてください。

ERRCODE_INVALID_COLUMN_DEFINITION

エラー: 数値型の無効な定義

  • 原因:NUMERIC または DECIMAL 列が、精度を指定せずに定義されました。

  • 解決策:NUMERIC(38, 18) のように、NUMERIC または DECIMAL 列の精度を指定してください。

ERRCODE_CANNOT_COERCE

エラー:cannot cast type date to integer

  • 原因:DATE 型を INTEGER 型にキャストすることはできません。

  • 解決策:有効な型キャストを使用するように SQL 構文を修正してください。

ERRCODE_UNDEFINED_SCHEMA または ERRCODE_INVALID_SCHEMA_NAME

エラー:schema "xxxx" does not exist

  • 原因:スキーマがデータベースに存在しません。

  • 解決策:SQL ステートメントのスキーマ名が正しいことを確認するか、最初にスキーマを作成してください。

ERRCODE_INTERNAL_ERROR

予期しない内部エラーを示します。

エラー:internal error: Connect timeout, err: std_exception: Connection refused

  • 原因:Hologres インスタンスが利用できないか、応答していません。

  • 解決策:Hologres インスタンスの停止を調査するために、サポートチケットを提出してください。

エラー:too many shards in this instance

  • 原因:指定されたシャード数がインスタンスの合計シャード制限を超えています。

  • 解決策:インスタンスのシャード制限を確認し、それに応じてシャード数を減らしてください。詳細については、「インスタンス管理」をご参照ください。

エラー:internal error: Write is not allowed in readonly mode

  • 原因:書き込み操作 (INSERT、UPDATE、DELETE) は、セカンダリインスタンス (読み取り専用レプリカ) ではサポートされていません。

  • 解決策:プライマリインスタンスで書き込み操作を実行してください。セカンダリインスタンスは SELECT クエリのみをサポートします。

エラー:remaining connection slots are reserved for non-replication superuser connections

  • 原因:インスタンスが最大接続数に達しました。スーパーユーザー接続のみが許可されます。

  • 解決策:スーパーユーザーアカウントを使用して、アイドル状態の接続を解放してください。詳細については、「接続の管理」をご参照ください。

エラー:Build desc failed: Column type: information_schema.sql_identifier can not translate into hologres type

  • 原因:クエリが、Hologres がサポートしていない複雑なデータ型を持つシステムテーブルの列を参照しています。

  • 解決策:Hologres クエリで複雑な列型を持つシステムテーブルを結合しないでください。

エラー:ERROR: commit ddl phase1 failed: DDLWrite is not allowed on replica

  • 原因:IP アドレスホワイトリストの変更などの DDL 操作は、セカンダリインスタンスでは実行できません。

  • 解決策:プライマリインスタンスで IP アドレスホワイトリストを変更してください。

エラー:current transaction is aborted, commands ignored until end of transaction block

  • 原因:トランザクション内のコマンドが失敗し、トランザクションをロールバックまたは終了する前に後続のコマンドが発行されました。例:

    begin;
    create xxxx
    
    begin;
  • 解決策:rollback; コマンドを実行して現在のトランザクションを終了し、コミットされていないすべての変更をロールバックしてください。

エラー:query length xxxxx  exceeded the maximum 102400

  • 原因:クエリの長さが 102,400 バイトの制限を超えています。

  • 解決策:クエリを書き直して、その長さが指定された制限内になるようにしてください。

エラー: プライマリキーによるレコードの変更は、このテーブルではできません

  • 原因:このエラーは、Flink を更新モードでプライマリキーのないテーブルにデータを書き込むときに発生します。

  • 解決策:宛先テーブルに適切なプライマリキーを設定してください。詳細については、「プライマリキー」をご参照ください。

エラー:ERROR: xxx for fe, should not be evaluated

  • 原因:この関数は Hologres エンジンで実行されますが、システムテーブルのクエリはエンジンをバイパスします。この関数はエンジンコンテキストの外では評価できません。

  • 解決策:Hologres システムテーブルに対するクエリでこの関数を使用しないでください。

数字で始まる列名の扱い

Hologres は PostgreSQL と互換性があるため、数字で始まる列名は二重引用符 (") で囲む必要があります。

列名が数字で始まる場合は、次の例に示すように、クエリで二重引用符で囲む必要があります:

select bizdate,"1_day_active_users","7_day_active_users" from t_active_users;

エラー: 他のオブジェクトが依存しているため、テーブルを削除できません

  • 原因:テーブルには、それを参照するビューなどの依存オブジェクトがあります。

  • 解決策:最初に依存オブジェクトを削除してから、テーブルを削除してください。

エラー:BinaryArray cannot contain more than 2147483646 bytes

  • 原因

    テーブル統計が古い場合、オプティマイザーが複数テーブルの結合に対して最適でない実行計画を選択することがあります。これにより、バッチ内の単一列の合計サイズが 2 GB を超え、このエラーがトリガーされます。

  • 解決策

    結合内のテーブルに対して次のコマンドを実行して、統計を更新してください:

    analyze <tablename>;

    統計を更新してもエラーが解決しない場合は、データに非常に大きな列値が含まれている可能性があります。SQL ステートメントの前に次の GUC パラメーターを追加してください:

    set hg_experimental_query_batch_size = 1024;

エラー: バイナリ用に 2^31 - 1 を超える容量は確保できません

  • 原因と解決策

    • 原因 1:テーブル統計が古い場合、最適でない実行計画により、バッチ内の単一列の合計サイズが 2 GB を超え、このエラーがトリガーされることがあります。

      解決策:テーブルで analyze コマンドを実行して、統計を更新してください。

      analyze <tablename>;
    • 原因 2:テーブル列のデータサイズが 2 GB を超えています。

      解決策:SQL ステートメントの前に次の GUC パラメーターを追加して、各クエリが読み取るバッチサイズを減らしてください:

      set hg_experimental_query_batch_size = 1024;

エラー: 内部エラー: シーケンスが使い果たされました

  • 原因:シリアル型の列が、自動インクリメントのシーケンス値を使い果たしました。

  • 解決策:

    • シリアル型を使用している場合は、テーブルを再作成し、列の型を bigserial に変更してください。

    • シリアル列への書き込みはテーブルロックを取得し、同時実行数を低下させる可能性があります。可能であれば、シリアル型の使用を避けることを検討してください。

SQL クエリ結果に改行を追加する

Hologres では、SQL クエリ結果に改行を挿入するには、E プレフィックス付きのエスケープ文字列構文を使用します。通常の文字列では、\n または \r\n はリテラル文字として扱われ、改行は生成されません。

  • -- 不正:改行を生成しません。
    SELECT STRING_AGG(name, '\r\n') FROM t1;
    
    -- 正解:E プレフィックス付きのエスケープ文字列定数を使用します。
    SELECT STRING_AGG(name, E'\r\n') FROM t1;
    
    -- \n のみを使用することもできます。
    SELECT STRING_AGG(name, E'\n') FROM t1;
  • 説明

    Hologres は PostgreSQL の構文と互換性があります。PostgreSQL では、E で始まる文字列 (例:E'\n') は C 形式のエスケープシーケンスをサポートします。これらのシーケンスでは、\n は改行文字を表し、\r はキャリッジリターンを表します。

NOW() 関数が遅延した時刻を返す場合の対処法

Hologres では、NOW() 関数はリアルタイムのシステムクロックではなく、現在のトランザクションの開始時刻を返します。クエリが長時間トランザクション内で実行される場合や、接続プールを介して接続が再利用される場合、返される時刻が実際のシステム時刻より遅れることがあります。

現在のリアルタイムのシステムクロックを取得するには、代わりに CLOCK_TIMESTAMP() 関数を使用してください。NOW() とは異なり、CLOCK_TIMESTAMP() は各呼び出しの瞬間の正確な時刻を返し、トランザクションの開始時刻の影響を受けません。

DELETE ステートメントは動的パーティションセレクターとしてサブクエリをサポートしますか?

いいえ。Hologres では、パーティションプルーニングには、パーティション条件が静的な値またはパラメーター化されたバインド値を使用する必要があります。サブクエリや動的な式は、WHERE ds = (SELECT MAX(ds) FROM ...) のようなパーティションセレクターとしてサポートされていません。

サブクエリをパーティション条件として使用すると、パーティションプルーニングが失敗し、パフォーマンスが大幅に低下する全表スキャンが発生する可能性があります。この問題を回避するには、まずパーティション値をクエリして変数に格納し、次に DELETE ステートメントで静的な値を使用します。

GUC パラメーターを変更せずに ORCA オプティマイザーのエラーを回避する方法

SQL ステートメントを書き換えるだけでは、この既知の問題を解決することはできません。ORCA オプティマイザーのエラーを修正するには、Hologres インスタンスをバージョン 4.0 以降にアップグレードしてください。

古いインスタンスは正常に動作するのに、新しいインスタンスでエラーやパフォーマンスの問題が発生するのはなぜですか?

新旧の Hologres インスタンスは、バージョンの違い、計算容量、ワークロードの変動により、動作が異なる場合があります。新しいインスタンスは、より厳格な検証ルールや変更されたデフォルト設定を持つ異なるエンジンバージョンを使用している可能性があります。さらに、新しいインスタンスの計算容量と負荷プロファイルは、古いインスタンスのものとは異なる場合があります。

新しいインスタンスでの互換性やパフォーマンスの問題を解決するには、Hologres の最新の安定バージョンにアップグレードしてください。

エラー:ERROR: tables can have at most 6400 columns

  • 原因:Hologres は、各テーブルの列数を最大 6400 に制限しています。DROP COLUMN で列を削除した後でも、テーブルメタデータの列数は蓄積され続けます。頻繁な ADD COLUMN および DROP COLUMN 操作により、メタデータの合計列数が 6400 を超え、このエラーがトリガーされる可能性があります。

  • 解決策:

    • 短期的な修正:テーブルを再作成し、データを移行します。新しいテーブルは、新しい列数で開始されます。

    • 長期的な推奨事項:頻繁に変更される列を単一の JSON 列に統合してテーブルスキーマを最適化し、ADD/DROP COLUMN 操作の繰り返しを避けます。