このトピックでは、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 またはプライマリキー違反
エラー: Update row with Key (id)=(xxxx) multiple times or duplicate key value violates unique constraint
-
原因:書き込みデータに重複するプライマリキー値が含まれているため、一意性制約に違反します。
-
解決策:
-
INSERT 文でエラーが発生した場合は、
INSERT INTO xx ON CONFLICT構文を使用してプライマリキーの重複を排除してください。詳細については、「INSERT ON CONFLICT (アップサート)」をご参照ください。 -
このエラーが
INSERT...ON CONFLICT文で発生した場合、ソースデータ自体に重複するプライマリキーが含まれています。詳細については、「一般的なエラー」をご参照ください。 -
このエラーは、テーブルの Time to Live (TTL) が期限切れで、期限切れのデータがまだ物理的に削除されていない場合にも発生する可能性があります。この場合は、hg_remove_duplicated_pk 関数を使用して重複データをクリーンアップしてください。詳細については、「一般的なエラー」をご参照ください。
-
ERRCODE_CHECK_VIOLATION またはパーティション制約
エラー: 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 制約または 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 操作を実行しないようにしてください。
エラー: query is cancelled Cannot find index full ID:xxx (table id: x, index id: x) in storages or it is deleting
-
原因:実行中に、クエリ対象のテーブルのいずれかに対して TRUNCATE または DROP 操作が実行されました。これによりテーブル ID が変更され、クエリがキャンセルされました。
-
解決策:Query Insight を使用して、クエリと同時に TRUNCATE または DROP 操作が実行されたかどうかを確認してください。詳細については、「Query Insight」をご参照ください。
ERRCODE_FEATURE_NOT_SUPPORTED またはサポートされていない機能
エラー: 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 (アップサート)」をご参照ください。
エラー: 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 トランザクション機能」をご参照ください。
エラー: Creating publication with table that without binlog is not supported now
-
原因:Binlog が有効になっていないテーブルに対してパブリケーションを作成しようとしました。パブリケーションでは、データ変更をサブスクライブするために Binlog が必要です。
-
解決策:パブリケーションを作成する前に、テーブルで Binlog を有効にしてください。Binlog が有効になっているテーブルに対してのみパブリケーションを作成できます。詳細については、「JDBC を使用した Hologres Binlog の利用」をご参照ください。
エラー: Feature not supported: INSERT on conflict contains un-unique column
-
原因:INSERT ON CONFLICT ステートメントのコンフリクトターゲットにはプライマリキーのみを指定できます。エラーメッセージでは "un-unique column" (一意でない列) と表示されることがありますが、実際にはプライマリキー以外の列 (UNIQUE 制約を持つ列を含む) はコンフリクトターゲットとしてサポートされていません。
-
解決策:INSERT ON CONFLICT のコンフリクトターゲットには、プライマリキー列のみを指定してください。
エラー: Feature not supported: UPDATE with shard keys
-
原因:Hologres では、プライマリキーまたは分散キー列に対する UPDATE 操作はサポートされていません。Hologres の分散キーは、エラーメッセージで言及されているシャードキー (shard key) に相当します。
-
解決策:プライマリキーまたは分散キー列を更新しないでください。これらの値を変更するには、古い行を
DELETEして、新しい行をINSERTする必要があります。
エラー: time before 1925 not supported
-
原因:時間関連の関数は、デフォルトで 1925 年から 2282 年までの範囲をサポートしています。この範囲外の値はエラーの原因となります。
-
解決策:to_char、to_date、to_timestamp などの関数でより広い時間範囲を有効にするには、SQL ステートメントの前に
hg_experimental_functions_use_pg_implementationGUC パラメーターを設定してください。詳細については、「日付と時刻の関数」をご参照ください。
エラー: Group by key is type of imprecise not supported
-
原因: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 is not supported now
-
原因:Hologres では、
ALTER TABLEを使用した列データ型の変更はサポートされていません。 -
解決策:列の型を変更するには、目的の型を指定してテーブルを再作成してください。
エラー: ERROR: Currently materialized view does not support aggregate on expressions, only support single column
-
原因:単一テーブルのマテリアライズドビューでは、式に対する集計はサポートされていません。
-
解決策:単一テーブルのマテリアライズドビューでは式の使用を避けてください。単一列の集計のみを使用してください。詳細については、「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
-
原因:指定されたテーブルグループは存在しません。
-
解決策:テーブルを作成する際に既存のテーブルグループを指定するか、最初にテーブルグループを作成してください。
エラー:The specified partition 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
エラー: Total memory used by all existing queries exceeded memory limitation
-
原因:クエリがメモリ制限を超過し、メモリ不足 (OOM) エラーが発生しました。
-
解決策: 詳細については、「OOM エラーのトラブルシューティング」をご参照ください。
ERRCODE_DATATYPE_MISMATCH
エラー:internal error: Datasets has different schema
-
原因:結合するデータセット (UNION や INSERT...SELECT ステートメントなど) のスキーマで、カラム数、順序、またはデータ型が一致していません。
-
解決策:ステートメントのすべての部分で、カラム数、順序、データ型が一貫していることを確認してください。
ERRCODE_DIVISION_BY_ZERO
-
原因:SQL ステートメントにゼロ除算が含まれています。
-
解決策:
-
ゼロの除数を避けるか、CASE 式を使用して処理してください。
-
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 または MaxCompute スキャン制限の超過
エラー: Exceeds the partition limitation of 512, current match xxx partitions.
-
原因: クエリが MaxCompute 外部テーブルで 512 個を超えるパーティションをスキャンしており、デフォルトの制限を超えています。
-
解決策: パーティションフィルター条件を追加するか、次の GUC パラメーターを使用してパーティションスキャン制限を増やしてください。詳細については、「MaxCompute 統合に関するよくある質問」をご参照ください。
set hg_foreign_table_max_partition_limit =xx;
エラー: Build desc failed: Exceeds the scan limitation of 200 GB, current scan 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
エラー:You have NO privilege 'odps:Select' on xxx
-
原因:現在のアカウントには、MaxCompute テーブルをクエリするための権限がありません。
-
解決策:MaxCompute でアカウントに必要な権限を付与してください。
エラー:The sensitive label of column 'xxx' is 2, but your effective label is 0
-
原因:現在のアカウントは、MaxCompute テーブルの一部の列にのみアクセスできます。
-
解決策:MaxCompute でより広範な列レベルの権限を付与するか、アクセス権のある列のみをクエリしてください。認可の詳細については、「コマンドによるユーザー権限の管理」をご参照ください。
ERRCODE_DUPLICATE_OBJECT
エラー: extension "xxxxx" already exists
原因: 指定されたエクステンションはデータベースに既に存在します。
解決策: エクステンションはすでにインストールされています。アクションは不要です。このエラーを回避するには、
CREATE EXTENSION IF NOT EXISTSを使用します。
ERRCODE_INVALID_TEXT_REPRESENTATION または 無効な入力
エラー: invalid input syntax for type numeric: ""
-
原因: NUMERIC 列には、数値として解析できない空文字列などの無効なデータが含まれています。
-
解決策: ソースデータをクリーンアップし、NUMERIC 型に準拠させてください。たとえば、空文字列を NULL または 0 に変換します。
エラー: invalid input syntax for integer: xxx
-
原因: INT 列には、整数として解析できないデータが含まれています。
-
解決策: 無効なデータをクリーンアップしてください。
ERRCODE_BAD_COPY_FILE_FORMAT
Error: missing data for column "xxx". failed to query next
-
原因:データファイルの形式が正しくありません。これは、多くの場合、データに COPY コマンドで指定した区切り文字 (カンマやスペースなど) が含まれているために列数が不一致となり、発生します。
-
解決策:データをクリーンアップするか、データ値に含まれない別の区切り文字を使用してください。
ERRCODE_SYNTAX_ERROR
Error: 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 列の精度を調整するか、定義された精度に収まるようにデータをクリーンアップしてください。
その他の一般的なエラー
エラー: 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
エラー: invalid value "" for "yyyy". Value must be an integer.
-
原因:データが期待される日時フォーマットに準拠していません。
-
解決策:書き込む前に、データに有効な日時の値が含まれていることを確認してください。
ERRCODE_CHARACTER_NOT_IN_REPERTOIRE
エラー: 「UTF8」 エンコーディングの不正なバイトシーケンス: 0xe9 0x80
-
原因: データに UTF-8 エンコーディングで有効でない文字が含まれています。
-
解決策: 不正なデータをクリーンアップしてください。
ERRCODE_DUPLICATE_TABLE
エラー: relation "xxxx" already exists
-
原因:指定されたリレーションはデータベースに既に存在します。
-
解決策:別のリレーション名を使用するか、
CREATE TABLE IF NOT EXISTSを使用してエラーを回避してください。
ERRCODE_UNTRANSLATABLE_CHARACTER
Error: 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 and CREATE TABLE statement are not in the same transaction for 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
エラー: 列参照「xxx」はあいまいです
-
原因: JOIN クエリ内の列名が複数のテーブルに存在するため、あいまいです。たとえば、
SELECT id FROM t1 INNER JOIN t2 ON t1.id=t2.idでは、SELECT句のidは、t1またはt2のどちらかを参照する可能性があるため、あいまいです。 -
解決策: テーブル名またはエイリアス (例:
t1.id) で列を修飾します。
ERRCODE_DUPLICATE_COLUMN
Error: column "xxx" specified more than once
-
原因:
CREATE TABLEステートメントで、同じカラム名が複数回指定されています。 -
解決策:
CREATE TABLEステートメントから重複したカラムを削除してください。
ERRCODE_AMBIGUOUS_FUNCTION
このエラーは、関数呼び出しが複数のオーバーロードに一致し、データベースがどのオーバーロードを使用すべきか判断できない場合に発生します。この問題を解決するには、引数を目的のデータ型に明示的にキャストしてください。
ERRCODE_INVALID_COLUMN_DEFINITION
エラー:数値型の無効な定義
-
原因: NUMERIC または DECIMAL 列の定義で精度が指定されていません。
-
解決策: NUMERIC または DECIMAL 列に、
NUMERIC(38, 18)のように精度を指定してください。
ERRCODE_CANNOT_COERCE
エラー: cannot cast type date to integer
-
原因:DATE 型は INTEGER 型にキャストできません。
-
解決策:SQL 構文を修正し、有効な型キャストを使用してください。
ERRCODE_UNDEFINED_SCHEMA or ERRCODE_INVALID_SCHEMA_NAME
Error: schema "xxxx" does not exist
-
原因:指定したスキーマがデータベースに存在しません。
-
解決策:SQL ステートメント内のスキーマ名が正しいことを確認するか、先にスキーマを作成してください。
ERRCODE_INTERNAL_ERROR
予期しない内部エラーです。
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;コマンドを実行し、現在のトランザクションを終了して、コミットされていない変更をすべてロールバックしてください。
Error: query length xxxxx exceeded the maximum 102400
-
原因:クエリ長が 102,400 バイトの制限を超えています。
-
解決策:制限内に収まるようにクエリを書き換えてください。
エラー:Modify record by primary key is not on this table
-
原因:このエラーは、Flink のアップデートモードでプライマリキーのないテーブルにデータを書き込むと発生します。
-
解決策:ターゲットテーブルに適切なプライマリキーを設定してください。詳細については、「プライマリキー」をご参照ください。
Error: 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;
エラー: cannot drop table because other objects depend on it
-
原因:テーブルには、それを参照するビューなどの依存オブジェクトがあります。
-
解決策:まず依存オブジェクトをドロップしてから、テーブルをドロップしてください。
Error: BinaryArray cannot contain more than 2147483646 bytes
-
原因
テーブルの統計情報が古い場合、オプティマイザーが複数テーブルの結合に対して最適ではない実行計画を選択することがあります。その結果、バッチ内の単一カラムの合計サイズが 2 GB を超え、このエラーが発生します。
-
解決策
結合対象のテーブルで次のコマンドを実行し、統計情報を更新してください:
analyze <tablename>;統計情報を更新してもエラーが解消しない場合、データに非常に大きなカラム値が含まれている可能性があります。次の GUC パラメーターを SQL ステートメントの前に追加してください:
set hg_experimental_query_batch_size = 1024;
エラー:Cannot reserve capacity larger than 2^31 - 1 for binary
-
原因と解決策
-
原因 1:テーブル統計が古い場合、最適ではない実行計画が原因で、バッチ内の単一カラムの合計サイズが 2 GB を超え、このエラーが発生することがあります。
解決策: テーブルに対して
analyzeコマンドを実行し、統計情報を更新します。analyze <tablename>; -
原因 2:テーブルカラムのデータサイズが 2 GB を超えています。
解決策:SQL ステートメントの前に次の GUC パラメーターを追加して、各クエリで読み取られるバッチサイズを小さくしてください。
set hg_experimental_query_batch_size = 1024;
-
エラー: internal error: Sequence is used out
-
原因:
serial型のカラムで自動インクリメントのシーケンス値が枯渇しました。 -
解決策:
-
serial型を使用している場合は、テーブルを再作成し、カラムの型をbigserialに変更してください。 -
serial型のカラムへの書き込みはテーブルロックを取得するため、同時実行性が低下する可能性があります。可能であれば、serial型の使用は避けてください。
-
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 インスタンスを V4.0 以降にアップグレードしてください。
古いインスタンスは正常に実行されているのに、なぜ新しいインスタンスではエラーが報告されたり、パフォーマンスの問題が発生したりするのですか?
新旧の Hologres インスタンスでは、バージョンの違い、コンピューティングキャパシティー、ワークロードの差異により、動作が異なる場合があります。新しいインスタンスでは、より厳格な検証ルールや変更されたデフォルト設定を持つ異なるエンジンバージョンを使用している可能性があります。さらに、新しいインスタンスのコンピューティングキャパシティーや負荷プロファイルが、古いインスタンスのものと異なる場合もあります。
新しいインスタンスでの互換性やパフォーマンスの問題を解決するには、Hologres の最新の安定版にアップグレードしてください。
Error: ERROR: tables can have at most 6400 columns
-
原因: Hologres では、各テーブルは最大 6400 列に制限されています。
DROP COLUMNで列を削除しても、テーブルメタデータ内の列数は蓄積され続けます。頻繁にADD COLUMNとDROP COLUMNの操作を行うと、メタデータの総列数が 6400 を超え、このエラーが発生する原因となることがあります。 -
解決策:
-
短期的な解決策: テーブルを再作成し、データ移行を行ってください。新しいテーブルではカラム数がリセットされます。
-
長期的な推奨事項: 頻繁に変更されるカラムを 1 つの JSON カラムにまとめることでテーブルスキーマを最適化し、
ADD COLUMNとDROP COLUMNの操作の繰り返しを回避してください。
-