Syntax errors are quite common while coding.
But, things go for a toss when it results in website errors.
PostgreSQL error 42601 also occurs due to syntax errors in the database queries.
At Bobcares, we often get requests from PostgreSQL users to fix errors as part of our Server Management Services.
Today, let’s check PostgreSQL error in detail and see how our Support Engineers fix it for the customers.
What causes error 42601 in PostgreSQL?
PostgreSQL is an advanced database engine. It is popular for its extensive features and ability to handle complex database situations.
Applications like Instagram, Facebook, Apple, etc rely on the PostgreSQL database.
But what causes error 42601?
PostgreSQL error codes consist of five characters. The first two characters denote the class of errors. And the remaining three characters indicate a specific condition within that class.
Here, 42 in 42601 represent the class “Syntax Error or Access Rule Violation“.
In short, this error mainly occurs due to the syntax errors in the queries executed. A typical error shows up as:
Here, the syntax error has occurred in position 119 near the value “parents” in the query.
How we fix the error?
Now let’s see how our PostgreSQL engineers resolve this error efficiently.
Recently, one of our customers contacted us with this error. He tried to execute the following code,
CREATE OR REPLACE FUNCTION prc_tst_bulk(sql text)
RETURNS TABLE (name text, rowcount integer) AS
$$
BEGIN
WITH m_ty_person AS (return query execute sql)
select name, count(*) from m_ty_person where name like '%a%' group by name
union
select name, count(*) from m_ty_person where gender = 1 group by name;
END
$$ LANGUAGE plpgsql;
But, this ended up in PostgreSQL error 42601. And he got the following error message,
ERROR: syntax error at or near "return"
LINE 5: WITH m_ty_person AS (return query execute sql)
Our PostgreSQL Engineers checked the issue and found out the syntax error. The statement in Line 5 was a mix of plain and dynamic SQL. In general, the PostgreSQL query should be either fully dynamic or plain. Therefore, we changed the code as,
RETURN QUERY EXECUTE '
WITH m_ty_person AS (' || sql || $x$)
SELECT name, count(*)::int FROM m_ty_person WHERE name LIKE '%a%' GROUP BY name
UNION
SELECT name, count(*)::int FROM m_ty_person WHERE gender = 1 GROUP BY name$x$;
This resolved the error 42601, and the code worked fine.
[Need more assistance to solve PostgreSQL error 42601?- We’ll help you.]
Conclusion
In short, PostgreSQL error 42601 occurs due to the syntax errors in the code. Today, in this write-up, we have discussed how our Support Engineers fixed this error for our customers.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
GET STARTED
var google_conversion_label = «owonCMyG5nEQ0aD71QM»;
Return selected columns
CREATE OR REPLACE FUNCTION get_user_by_username(_username text
, _online bool DEFAULT false)
RETURNS TABLE (
user_id int
, user_name varchar
, last_activity timestamptz
)
LANGUAGE plpgsql AS
$func$
BEGIN
IF _online THEN
RETURN QUERY
UPDATE users u
SET last_activity = current_timestamp -- ts with time zone
WHERE u.user_name = _username
RETURNING u.user_id
, u.user_name
, u.last_activity;
ELSE
RETURN QUERY
SELECT u.user_id
, u.user_name
, u.last_activity
FROM users u
WHERE u.user_name = _username;
END IF;
END
$func$;
Call:
SELECT * FROM get_user_by_username('myuser', true);
You had DECLARE result record; but didn’t use the variable. I deleted the cruft.
You can return the record directly from the UPDATE, which is much faster than calling an additional SELECT statement. Use RETURN QUERY and UPDATE with a RETURNING clause.
If the user is not _online, default to a plain SELECT. This is also the (safe) default if the second parameter is omitted — which is only possible after providing that default with DEFAULT false in the function definition.
If you don’t table-qualify column names (tablename.columnname) in queries inside the function, be wary of naming conflicts between column names and named parameters, which are visible (most) everywhere inside a function.
You can also avoid such conflicts by using positional references ($n) for parameters. Or use a prefix that you never use for column names: like an underscore (_username).
If users.username is defined unique in your table, then LIMIT 1 in the second query is just cruft. If it is not, then the UPDATE can update multiple rows, which is most likely wrong. I assume a unique username and trim the noise.
Define the return type of the function (like @ertx demonstrated) or you have to provide a column definition list with every function call, which is awkward.
Creating a type for that purpose (like @ertx proposed) is a valid approach, but probably overkill for a single function. That was the way to go in old versions of Postgres before we had RETURNS TABLE for that purpose — like demonstrated above.
You do not need a loop for this simple function.
Every function needs a language declaration. LANGUAGE plpgsql in this case.
I use timestamptz (timestamp with time zone) instead of timestamp (timestamp without time zone), which is the sane default. See:
- Ignoring time zones altogether in Rails and PostgreSQL
Return (set of) whole row(s)
To return all columns of the existing table users, there is a simpler way. Postgres automatically defines a composite type of the same name for every table. Just use RETURNS SETOF users to vastly simplify the query:
CREATE OR REPLACE FUNCTION get_user_by_username(_username text
, _online bool DEFAULT false)
RETURNS SETOF users
LANGUAGE plpgsql AS
$func$
BEGIN
IF _online THEN
RETURN QUERY
UPDATE users u
SET last_activity = current_timestamp
WHERE u.user_name = _username
RETURNING u.*;
ELSE
RETURN QUERY
SELECT *
FROM users u
WHERE u.user_name = _username;
END IF;
END
$func$;
Return whole row plus custom addition
To address the question added by TheRealChx101 in a comment below:
What if you also have a calculated value in addition to a whole table? 😑
Not as simple, but doable. We can send the whole row type as one field, and add more:
CREATE OR REPLACE FUNCTION get_user_by_username3(_username text
, _online bool DEFAULT false)
RETURNS TABLE (
users_row users
, custom_addition text
)
LANGUAGE plpgsql AS
$func$
BEGIN
IF _online THEN
RETURN QUERY
UPDATE users u
SET last_activity = current_timestamp -- ts with time zone
WHERE u.user_name = _username
RETURNING u -- whole row
, u.user_name || u.user_id;
ELSE
RETURN QUERY
SELECT u, u.user_name || u.user_id
FROM users u
WHERE u.user_name = _username;
END IF;
END
$func$;
The «magic» is in the function call, where we (optionally) decompose the row type:
SELECT (users_row).*, custom_addition FROM get_user_by_username('foo', true);
db<>fiddle here (showing all)
If you need something more «dynamic», consider:
- Refactor a PL/pgSQL function to return the output of various SELECT queries
when I am using this command to update table in PostgreSQL 13:
UPDATE rss_sub_source
SET sub_url = SUBSTRING(sub_url, 1, CHAR_LENGTH(sub_url) - 1)
WHERE sub_url LIKE '%/'
limit 10
but shows this error:
SQL Error [42601]: ERROR: syntax error at or near "limit"
Position: 111
why would this error happen and what should I do to fix it?
asked Jul 22, 2021 at 14:09
1
LIMIT isn’t a valid keyword in an UPDATE statement according to the official PostgreSQL documentation:
[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
SET { column_name = { expression | DEFAULT } |
( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |
( column_name [, ...] ) = ( sub-SELECT )
} [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition | WHERE CURRENT OF cursor_name ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
Reference: UPDATE (PostgreSQL Documentation )
Solution
Remove LIMIT 10 from your statement.
answered Jul 22, 2021 at 14:32
John K. N.John K. N.
15.8k10 gold badges45 silver badges100 bronze badges
0
You could make something like this
But a Limit without an ORDER BY makes no sense, so you must choose one that gets you the correct 10 rows
UPDATE rss_sub_source t1
SET t1.sub_url = SUBSTRING(t1.sub_url, 1, CHAR_LENGTH(t1.sub_url) - 1)
FROM (SELECT id FROM rss_sub_source WHERE sub_url LIKE '%/' ORDER BY id LIMIT 10) t2
WHERE t2.id = t1.id
answered Jul 22, 2021 at 14:51
nbknbk
7,7395 gold badges12 silver badges27 bronze badges
Содержание
- Приложение A. Коды ошибок PostgreSQL
- Postgresql error sqlstate 42601
- Submit correction
Приложение A. Коды ошибок PostgreSQL
Всем сообщениям, которые выдаёт сервер PostgreSQL , назначены пятисимвольные коды ошибок, соответствующие кодам «SQLSTATE» , описанным в стандарте SQL. Приложения, которые должны знать, какое условие ошибки имело место, обычно проверяют код ошибки и только потом обращаются к текстовому сообщению об ошибке. Коды ошибок, скорее всего, не изменятся от выпуска к выпуску PostgreSQL , и они не меняются при локализации как сообщения об ошибках. Заметьте, что отдельные, но не все коды ошибок, которые выдаёт PostgreSQL , определены стандартом SQL; некоторые дополнительные коды ошибок для условий, не описанных стандартом, были добавлены независимо или позаимствованы из других баз данных.
Согласно стандарту, первые два символа кода ошибки обозначают класс ошибок, а последние три символа обозначают определённое условие в этом классе. Таким образом, приложение, не знающее значение определённого кода ошибки, всё же может понять, что делать, по классу ошибки.
В Таблице A-1 перечислены все коды ошибок, определённые в PostgreSQL 9.4.1. (Некоторые коды в настоящее время не используются, хотя они определены в стандарте SQL.) Также показаны классы ошибок. Для каждого класса ошибок имеется «стандартный» код ошибки с последними тремя символами 000. Этот код выдаётся только для таких условий ошибок, которые относятся к определённому классу, но не имеют более определённого кода.
Символ, указанный в колонке «Имя условия» , определяет условие в PL/pgSQL . Имена условий могут записываться в верхнем или нижнем регистре. (Заметьте, что PL/pgSQL , в отличие от ошибок, не распознаёт предупреждения; то есть классы 00, 01 и 02.)
Для некоторых типов ошибок сервер сообщает имя объекта базы данных (таблица, колонка таблицы, тип данных или ограничение), связанного с ошибкой; например, имя уникального ограничения, вызвавшего ошибку unique_violation. Такие имена передаются в отдельных полях сообщения об ошибке, чтобы приложениям не пришлось извлекать его из возможно локализованного текста ошибки для человека. На момент выхода PostgreSQL 9.3 полностью охватывались только ошибки класса SQLSTATE 23 (нарушения ограничений целостности), но в будущем должны быть охвачены и другие классы.
Источник
Postgresql error sqlstate 42601
All messages emitted by the PostgreSQL server are assigned five-character error codes that follow the SQL standard’s conventions for “ SQLSTATE ” codes. Applications that need to know which error condition has occurred should usually test the error code, rather than looking at the textual error message. The error codes are less likely to change across PostgreSQL releases, and also are not subject to change due to localization of error messages. Note that some, but not all, of the error codes produced by PostgreSQL are defined by the SQL standard; some additional error codes for conditions not defined by the standard have been invented or borrowed from other databases.
According to the standard, the first two characters of an error code denote a class of errors, while the last three characters indicate a specific condition within that class. Thus, an application that does not recognize the specific error code might still be able to infer what to do from the error class.
Table A.1 lists all the error codes defined in PostgreSQL 15.1. (Some are not actually used at present, but are defined by the SQL standard.) The error classes are also shown. For each error class there is a “ standard ” error code having the last three characters 000 . This code is used only for error conditions that fall within the class but do not have any more-specific code assigned.
The symbol shown in the column “ Condition Name ” is the condition name to use in PL/pgSQL . Condition names can be written in either upper or lower case. (Note that PL/pgSQL does not recognize warning, as opposed to error, condition names; those are classes 00, 01, and 02.)
For some types of errors, the server reports the name of a database object (a table, table column, data type, or constraint) associated with the error; for example, the name of the unique constraint that caused a unique_violation error. Such names are supplied in separate fields of the error report message so that applications need not try to extract them from the possibly-localized human-readable text of the message. As of PostgreSQL 9.3, complete coverage for this feature exists only for errors in SQLSTATE class 23 (integrity constraint violation), but this is likely to be expanded in future.
Table A.1. PostgreSQL Error Codes
| Error Code | Condition Name |
|---|---|
| Class 00 — Successful Completion | |
| 00000 | successful_completion |
| Class 01 — Warning | |
| 01000 | warning |
| 0100C | dynamic_result_sets_returned |
| 01008 | implicit_zero_bit_padding |
| 01003 | null_value_eliminated_in_set_function |
| 01007 | privilege_not_granted |
| 01006 | privilege_not_revoked |
| 01004 | string_data_right_truncation |
| 01P01 | deprecated_feature |
| Class 02 — No Data (this is also a warning class per the SQL standard) | |
| 02000 | no_data |
| 02001 | no_additional_dynamic_result_sets_returned |
| Class 03 — SQL Statement Not Yet Complete | |
| 03000 | sql_statement_not_yet_complete |
| Class 08 — Connection Exception | |
| 08000 | connection_exception |
| 08003 | connection_does_not_exist |
| 08006 | connection_failure |
| 08001 | sqlclient_unable_to_establish_sqlconnection |
| 08004 | sqlserver_rejected_establishment_of_sqlconnection |
| 08007 | transaction_resolution_unknown |
| 08P01 | protocol_violation |
| Class 09 — Triggered Action Exception | |
| 09000 | triggered_action_exception |
| Class 0A — Feature Not Supported | |
| 0A000 | feature_not_supported |
| Class 0B — Invalid Transaction Initiation | |
| 0B000 | invalid_transaction_initiation |
| Class 0F — Locator Exception | |
| 0F000 | locator_exception |
| 0F001 | invalid_locator_specification |
| Class 0L — Invalid Grantor | |
| 0L000 | invalid_grantor |
| 0LP01 | invalid_grant_operation |
| Class 0P — Invalid Role Specification | |
| 0P000 | invalid_role_specification |
| Class 0Z — Diagnostics Exception | |
| 0Z000 | diagnostics_exception |
| 0Z002 | stacked_diagnostics_accessed_without_active_handler |
| Class 20 — Case Not Found | |
| 20000 | case_not_found |
| Class 21 — Cardinality Violation | |
| 21000 | cardinality_violation |
| Class 22 — Data Exception | |
| 22000 | data_exception |
| 2202E | array_subscript_error |
| 22021 | character_not_in_repertoire |
| 22008 | datetime_field_overflow |
| 22012 | division_by_zero |
| 22005 | error_in_assignment |
| 2200B | escape_character_conflict |
| 22022 | indicator_overflow |
| 22015 | interval_field_overflow |
| 2201E | invalid_argument_for_logarithm |
| 22014 | invalid_argument_for_ntile_function |
| 22016 | invalid_argument_for_nth_value_function |
| 2201F | invalid_argument_for_power_function |
| 2201G | invalid_argument_for_width_bucket_function |
| 22018 | invalid_character_value_for_cast |
| 22007 | invalid_datetime_format |
| 22019 | invalid_escape_character |
| 2200D | invalid_escape_octet |
| 22025 | invalid_escape_sequence |
| 22P06 | nonstandard_use_of_escape_character |
| 22010 | invalid_indicator_parameter_value |
| 22023 | invalid_parameter_value |
| 22013 | invalid_preceding_or_following_size |
| 2201B | invalid_regular_expression |
| 2201W | invalid_row_count_in_limit_clause |
| 2201X | invalid_row_count_in_result_offset_clause |
| 2202H | invalid_tablesample_argument |
| 2202G | invalid_tablesample_repeat |
| 22009 | invalid_time_zone_displacement_value |
| 2200C | invalid_use_of_escape_character |
| 2200G | most_specific_type_mismatch |
| 22004 | null_value_not_allowed |
| 22002 | null_value_no_indicator_parameter |
| 22003 | numeric_value_out_of_range |
| 2200H | sequence_generator_limit_exceeded |
| 22026 | string_data_length_mismatch |
| 22001 | string_data_right_truncation |
| 22011 | substring_error |
| 22027 | trim_error |
| 22024 | unterminated_c_string |
| 2200F | zero_length_character_string |
| 22P01 | floating_point_exception |
| 22P02 | invalid_text_representation |
| 22P03 | invalid_binary_representation |
| 22P04 | bad_copy_file_format |
| 22P05 | untranslatable_character |
| 2200L | not_an_xml_document |
| 2200M | invalid_xml_document |
| 2200N | invalid_xml_content |
| 2200S | invalid_xml_comment |
| 2200T | invalid_xml_processing_instruction |
| 22030 | duplicate_json_object_key_value |
| 22031 | invalid_argument_for_sql_json_datetime_function |
| 22032 | invalid_json_text |
| 22033 | invalid_sql_json_subscript |
| 22034 | more_than_one_sql_json_item |
| 22035 | no_sql_json_item |
| 22036 | non_numeric_sql_json_item |
| 22037 | non_unique_keys_in_a_json_object |
| 22038 | singleton_sql_json_item_required |
| 22039 | sql_json_array_not_found |
| 2203A | sql_json_member_not_found |
| 2203B | sql_json_number_not_found |
| 2203C | sql_json_object_not_found |
| 2203D | too_many_json_array_elements |
| 2203E | too_many_json_object_members |
| 2203F | sql_json_scalar_required |
| 2203G | sql_json_item_cannot_be_cast_to_target_type |
| Class 23 — Integrity Constraint Violation | |
| 23000 | integrity_constraint_violation |
| 23001 | restrict_violation |
| 23502 | not_null_violation |
| 23503 | foreign_key_violation |
| 23505 | unique_violation |
| 23514 | check_violation |
| 23P01 | exclusion_violation |
| Class 24 — Invalid Cursor State | |
| 24000 | invalid_cursor_state |
| Class 25 — Invalid Transaction State | |
| 25000 | invalid_transaction_state |
| 25001 | active_sql_transaction |
| 25002 | branch_transaction_already_active |
| 25008 | held_cursor_requires_same_isolation_level |
| 25003 | inappropriate_access_mode_for_branch_transaction |
| 25004 | inappropriate_isolation_level_for_branch_transaction |
| 25005 | no_active_sql_transaction_for_branch_transaction |
| 25006 | read_only_sql_transaction |
| 25007 | schema_and_data_statement_mixing_not_supported |
| 25P01 | no_active_sql_transaction |
| 25P02 | in_failed_sql_transaction |
| 25P03 | idle_in_transaction_session_timeout |
| Class 26 — Invalid SQL Statement Name | |
| 26000 | invalid_sql_statement_name |
| Class 27 — Triggered Data Change Violation | |
| 27000 | triggered_data_change_violation |
| Class 28 — Invalid Authorization Specification | |
| 28000 | invalid_authorization_specification |
| 28P01 | invalid_password |
| Class 2B — Dependent Privilege Descriptors Still Exist | |
| 2B000 | dependent_privilege_descriptors_still_exist |
| 2BP01 | dependent_objects_still_exist |
| Class 2D — Invalid Transaction Termination | |
| 2D000 | invalid_transaction_termination |
| Class 2F — SQL Routine Exception | |
| 2F000 | sql_routine_exception |
| 2F005 | function_executed_no_return_statement |
| 2F002 | modifying_sql_data_not_permitted |
| 2F003 | prohibited_sql_statement_attempted |
| 2F004 | reading_sql_data_not_permitted |
| Class 34 — Invalid Cursor Name | |
| 34000 | invalid_cursor_name |
| Class 38 — External Routine Exception | |
| 38000 | external_routine_exception |
| 38001 | containing_sql_not_permitted |
| 38002 | modifying_sql_data_not_permitted |
| 38003 | prohibited_sql_statement_attempted |
| 38004 | reading_sql_data_not_permitted |
| Class 39 — External Routine Invocation Exception | |
| 39000 | external_routine_invocation_exception |
| 39001 | invalid_sqlstate_returned |
| 39004 | null_value_not_allowed |
| 39P01 | trigger_protocol_violated |
| 39P02 | srf_protocol_violated |
| 39P03 | event_trigger_protocol_violated |
| Class 3B — Savepoint Exception | |
| 3B000 | savepoint_exception |
| 3B001 | invalid_savepoint_specification |
| Class 3D — Invalid Catalog Name | |
| 3D000 | invalid_catalog_name |
| Class 3F — Invalid Schema Name | |
| 3F000 | invalid_schema_name |
| Class 40 — Transaction Rollback | |
| 40000 | transaction_rollback |
| 40002 | transaction_integrity_constraint_violation |
| 40001 | serialization_failure |
| 40003 | statement_completion_unknown |
| 40P01 | deadlock_detected |
| Class 42 — Syntax Error or Access Rule Violation | |
| 42000 | syntax_error_or_access_rule_violation |
| 42601 | syntax_error |
| 42501 | insufficient_privilege |
| 42846 | cannot_coerce |
| 42803 | grouping_error |
| 42P20 | windowing_error |
| 42P19 | invalid_recursion |
| 42830 | invalid_foreign_key |
| 42602 | invalid_name |
| 42622 | name_too_long |
| 42939 | reserved_name |
| 42804 | datatype_mismatch |
| 42P18 | indeterminate_datatype |
| 42P21 | collation_mismatch |
| 42P22 | indeterminate_collation |
| 42809 | wrong_object_type |
| 428C9 | generated_always |
| 42703 | undefined_column |
| 42883 | undefined_function |
| 42P01 | undefined_table |
| 42P02 | undefined_parameter |
| 42704 | undefined_object |
| 42701 | duplicate_column |
| 42P03 | duplicate_cursor |
| 42P04 | duplicate_database |
| 42723 | duplicate_function |
| 42P05 | duplicate_prepared_statement |
| 42P06 | duplicate_schema |
| 42P07 | duplicate_table |
| 42712 | duplicate_alias |
| 42710 | duplicate_object |
| 42702 | ambiguous_column |
| 42725 | ambiguous_function |
| 42P08 | ambiguous_parameter |
| 42P09 | ambiguous_alias |
| 42P10 | invalid_column_reference |
| 42611 | invalid_column_definition |
| 42P11 | invalid_cursor_definition |
| 42P12 | invalid_database_definition |
| 42P13 | invalid_function_definition |
| 42P14 | invalid_prepared_statement_definition |
| 42P15 | invalid_schema_definition |
| 42P16 | invalid_table_definition |
| 42P17 | invalid_object_definition |
| Class 44 — WITH CHECK OPTION Violation | |
| 44000 | with_check_option_violation |
| Class 53 — Insufficient Resources | |
| 53000 | insufficient_resources |
| 53100 | disk_full |
| 53200 | out_of_memory |
| 53300 | too_many_connections |
| 53400 | configuration_limit_exceeded |
| Class 54 — Program Limit Exceeded | |
| 54000 | program_limit_exceeded |
| 54001 | statement_too_complex |
| 54011 | too_many_columns |
| 54023 | too_many_arguments |
| Class 55 — Object Not In Prerequisite State | |
| 55000 | object_not_in_prerequisite_state |
| 55006 | object_in_use |
| 55P02 | cant_change_runtime_param |
| 55P03 | lock_not_available |
| 55P04 | unsafe_new_enum_value_usage |
| Class 57 — Operator Intervention | |
| 57000 | operator_intervention |
| 57014 | query_canceled |
| 57P01 | admin_shutdown |
| 57P02 | crash_shutdown |
| 57P03 | cannot_connect_now |
| 57P04 | database_dropped |
| 57P05 | idle_session_timeout |
| Class 58 — System Error (errors external to PostgreSQL itself) | |
| 58000 | system_error |
| 58030 | io_error |
| 58P01 | undefined_file |
| 58P02 | duplicate_file |
| Class 72 — Snapshot Failure | |
| 72000 | snapshot_too_old |
| Class F0 — Configuration File Error | |
| F0000 | config_file_error |
| F0001 | lock_file_exists |
| Class HV — Foreign Data Wrapper Error (SQL/MED) | |
| HV000 | fdw_error |
| HV005 | fdw_column_name_not_found |
| HV002 | fdw_dynamic_parameter_value_needed |
| HV010 | fdw_function_sequence_error |
| HV021 | fdw_inconsistent_descriptor_information |
| HV024 | fdw_invalid_attribute_value |
| HV007 | fdw_invalid_column_name |
| HV008 | fdw_invalid_column_number |
| HV004 | fdw_invalid_data_type |
| HV006 | fdw_invalid_data_type_descriptors |
| HV091 | fdw_invalid_descriptor_field_identifier |
| HV00B | fdw_invalid_handle |
| HV00C | fdw_invalid_option_index |
| HV00D | fdw_invalid_option_name |
| HV090 | fdw_invalid_string_length_or_buffer_length |
| HV00A | fdw_invalid_string_format |
| HV009 | fdw_invalid_use_of_null_pointer |
| HV014 | fdw_too_many_handles |
| HV001 | fdw_out_of_memory |
| HV00P | fdw_no_schemas |
| HV00J | fdw_option_name_not_found |
| HV00K | fdw_reply_handle |
| HV00Q | fdw_schema_not_found |
| HV00R | fdw_table_not_found |
| HV00L | fdw_unable_to_create_execution |
| HV00M | fdw_unable_to_create_reply |
| HV00N | fdw_unable_to_establish_connection |
| Class P0 — PL/pgSQL Error | |
| P0000 | plpgsql_error |
| P0001 | raise_exception |
| P0002 | no_data_found |
| P0003 | too_many_rows |
| P0004 | assert_failure |
| Class XX — Internal Error | |
| XX000 | internal_error |
| XX001 | data_corrupted |
| XX002 | index_corrupted |
| Prev | Up | Next |
| Part VIII. Appendixes | Home | Appendix B. Date/Time Support |
Submit correction
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.
Источник
@YohDeadfall — I understand that part about it, but this is not script that I am creating or even code that I am creating. This is all created under the hood by Npsql/EntityFramework. My quick guess is that I am extending my DbContext from IdentityDbContext<IdentityUser> which wants to create all of the tables for roles, users, claims, etc. If I change this to just extend from DbContext, then everything works as advertised.
Below is the script that EF is trying to use created from dotnet ef migrations script — please be aware that I have removed my custom part of the script for brevity.
You can see there are two specific calls that are being made where [NormalizedName] and [NormalizedUserName] are being used.
CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( "MigrationId" varchar(150) NOT NULL, "ProductVersion" varchar(32) NOT NULL, CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") ); CREATE TABLE "AspNetRoles" ( "Id" text NOT NULL, "ConcurrencyStamp" text NULL, "Name" varchar(256) NULL, "NormalizedName" varchar(256) NULL, CONSTRAINT "PK_AspNetRoles" PRIMARY KEY ("Id") ); CREATE TABLE "AspNetUsers" ( "Id" text NOT NULL, "AccessFailedCount" int4 NOT NULL, "ConcurrencyStamp" text NULL, "Email" varchar(256) NULL, "EmailConfirmed" bool NOT NULL, "LockoutEnabled" bool NOT NULL, "LockoutEnd" timestamptz NULL, "NormalizedEmail" varchar(256) NULL, "NormalizedUserName" varchar(256) NULL, "PasswordHash" text NULL, "PhoneNumber" text NULL, "PhoneNumberConfirmed" bool NOT NULL, "SecurityStamp" text NULL, "TwoFactorEnabled" bool NOT NULL, "UserName" varchar(256) NULL, CONSTRAINT "PK_AspNetUsers" PRIMARY KEY ("Id") ); CREATE TABLE "AspNetRoleClaims" ( "Id" int4 NOT NULL, "ClaimType" text NULL, "ClaimValue" text NULL, "RoleId" text NOT NULL, CONSTRAINT "PK_AspNetRoleClaims" PRIMARY KEY ("Id"), CONSTRAINT "FK_AspNetRoleClaims_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserClaims" ( "Id" int4 NOT NULL, "ClaimType" text NULL, "ClaimValue" text NULL, "UserId" text NOT NULL, CONSTRAINT "PK_AspNetUserClaims" PRIMARY KEY ("Id"), CONSTRAINT "FK_AspNetUserClaims_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserLogins" ( "LoginProvider" text NOT NULL, "ProviderKey" text NOT NULL, "ProviderDisplayName" text NULL, "UserId" text NOT NULL, CONSTRAINT "PK_AspNetUserLogins" PRIMARY KEY ("LoginProvider", "ProviderKey"), CONSTRAINT "FK_AspNetUserLogins_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserRoles" ( "UserId" text NOT NULL, "RoleId" text NOT NULL, CONSTRAINT "PK_AspNetUserRoles" PRIMARY KEY ("UserId", "RoleId"), CONSTRAINT "FK_AspNetUserRoles_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE, CONSTRAINT "FK_AspNetUserRoles_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserTokens" ( "UserId" text NOT NULL, "LoginProvider" text NOT NULL, "Name" text NOT NULL, "Value" text NULL, CONSTRAINT "PK_AspNetUserTokens" PRIMARY KEY ("UserId", "LoginProvider", "Name"), CONSTRAINT "FK_AspNetUserTokens_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE INDEX "IX_AspNetRoleClaims_RoleId" ON "AspNetRoleClaims" ("RoleId"); CREATE UNIQUE INDEX "RoleNameIndex" ON "AspNetRoles" ("NormalizedName") WHERE [NormalizedName] IS NOT NULL; CREATE INDEX "IX_AspNetUserClaims_UserId" ON "AspNetUserClaims" ("UserId"); CREATE INDEX "IX_AspNetUserLogins_UserId" ON "AspNetUserLogins" ("UserId"); CREATE INDEX "IX_AspNetUserRoles_RoleId" ON "AspNetUserRoles" ("RoleId"); CREATE INDEX "EmailIndex" ON "AspNetUsers" ("NormalizedEmail"); CREATE UNIQUE INDEX "UserNameIndex" ON "AspNetUsers" ("NormalizedUserName") WHERE [NormalizedUserName] IS NOT NULL; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") VALUES ('20180514204732_initial', '2.0.3-rtm-10026');
00000successful_completion01000warning0100Cdynamic_result_sets_returned01008implicit_zero_bit_padding01003null_value_eliminated_in_set_function01007privilege_not_granted01006privilege_not_revoked01004string_data_right_truncation01P01deprecated_feature02000no_data02001no_additional_dynamic_result_sets_returned03000sql_statement_not_yet_complete08000connection_exception08003connection_does_not_exist08006connection_failure08001sqlclient_unable_to_establish_sqlconnection08004sqlserver_rejected_establishment_of_sqlconnection08007transaction_resolution_unknown08P01protocol_violation09000triggered_action_exception0A000feature_not_supported0B000invalid_transaction_initiation0F000locator_exception0F001invalid_locator_specification0L000invalid_grantor0LP01invalid_grant_operation0P000invalid_role_specification0Z000diagnostics_exception0Z002stacked_diagnostics_accessed_without_active_handler20000case_not_found21000cardinality_violation22000data_exception2202Earray_subscript_error22021character_not_in_repertoire22008datetime_field_overflow22012division_by_zero22005error_in_assignment2200Bescape_character_conflict22022indicator_overflow22015interval_field_overflow2201Einvalid_argument_for_logarithm22014invalid_argument_for_ntile_function22016invalid_argument_for_nth_value_function2201Finvalid_argument_for_power_function2201Ginvalid_argument_for_width_bucket_function22018invalid_character_value_for_cast22007invalid_datetime_format22019invalid_escape_character2200Dinvalid_escape_octet22025invalid_escape_sequence22P06nonstandard_use_of_escape_character22010invalid_indicator_parameter_value22023invalid_parameter_value22013invalid_preceding_or_following_size2201Binvalid_regular_expression2201Winvalid_row_count_in_limit_clause2201Xinvalid_row_count_in_result_offset_clause2202Hinvalid_tablesample_argument2202Ginvalid_tablesample_repeat22009invalid_time_zone_displacement_value2200Cinvalid_use_of_escape_character2200Gmost_specific_type_mismatch22004null_value_not_allowed22002null_value_no_indicator_parameter22003numeric_value_out_of_range2200Hsequence_generator_limit_exceeded22026string_data_length_mismatch22001string_data_right_truncation22011substring_error22027trim_error22024unterminated_c_string2200Fzero_length_character_string22P01floating_point_exception22P02invalid_text_representation22P03invalid_binary_representation22P04bad_copy_file_format22P05untranslatable_character2200Lnot_an_xml_document2200Minvalid_xml_document2200Ninvalid_xml_content2200Sinvalid_xml_comment2200Tinvalid_xml_processing_instruction22030duplicate_json_object_key_value22031invalid_argument_for_sql_json_datetime_function22032invalid_json_text22033invalid_sql_json_subscript22034more_than_one_sql_json_item22035no_sql_json_item22036non_numeric_sql_json_item22037non_unique_keys_in_a_json_object22038singleton_sql_json_item_required22039sql_json_array_not_found2203Asql_json_member_not_found2203Bsql_json_number_not_found2203Csql_json_object_not_found2203Dtoo_many_json_array_elements2203Etoo_many_json_object_members2203Fsql_json_scalar_required2203Gsql_json_item_cannot_be_cast_to_target_type23000integrity_constraint_violation23001restrict_violation23502not_null_violation23503foreign_key_violation23505unique_violation23514check_violation23P01exclusion_violation24000invalid_cursor_state25000invalid_transaction_state25001active_sql_transaction25002branch_transaction_already_active25008held_cursor_requires_same_isolation_level25003inappropriate_access_mode_for_branch_transaction25004inappropriate_isolation_level_for_branch_transaction25005no_active_sql_transaction_for_branch_transaction25006read_only_sql_transaction25007schema_and_data_statement_mixing_not_supported25P01no_active_sql_transaction25P02in_failed_sql_transaction25P03idle_in_transaction_session_timeout26000invalid_sql_statement_name27000triggered_data_change_violation28000invalid_authorization_specification28P01invalid_password2B000dependent_privilege_descriptors_still_exist2BP01dependent_objects_still_exist2D000invalid_transaction_termination2F000sql_routine_exception2F005function_executed_no_return_statement2F002modifying_sql_data_not_permitted2F003prohibited_sql_statement_attempted2F004reading_sql_data_not_permitted34000invalid_cursor_name38000external_routine_exception38001containing_sql_not_permitted38002modifying_sql_data_not_permitted38003prohibited_sql_statement_attempted38004reading_sql_data_not_permitted39000external_routine_invocation_exception39001invalid_sqlstate_returned39004null_value_not_allowed39P01trigger_protocol_violated39P02srf_protocol_violated39P03event_trigger_protocol_violated3B000savepoint_exception3B001invalid_savepoint_specification3D000invalid_catalog_name3F000invalid_schema_name40000transaction_rollback40002transaction_integrity_constraint_violation40001serialization_failure40003statement_completion_unknown40P01deadlock_detected42000syntax_error_or_access_rule_violation42601syntax_error42501insufficient_privilege42846cannot_coerce42803grouping_error42P20windowing_error42P19invalid_recursion42830invalid_foreign_key42602invalid_name42622name_too_long42939reserved_name42804datatype_mismatch42P18indeterminate_datatype42P21collation_mismatch42P22indeterminate_collation42809wrong_object_type428C9generated_always42703undefined_column42883undefined_function42P01undefined_table42P02undefined_parameter42704undefined_object42701duplicate_column42P03duplicate_cursor42P04duplicate_database42723duplicate_function42P05duplicate_prepared_statement42P06duplicate_schema42P07duplicate_table42712duplicate_alias42710duplicate_object42702ambiguous_column42725ambiguous_function42P08ambiguous_parameter42P09ambiguous_alias42P10invalid_column_reference42611invalid_column_definition42P11invalid_cursor_definition42P12invalid_database_definition42P13invalid_function_definition42P14invalid_prepared_statement_definition42P15invalid_schema_definition42P16invalid_table_definition42P17invalid_object_definition44000with_check_option_violation53000insufficient_resources53100disk_full53200out_of_memory53300too_many_connections53400configuration_limit_exceeded54000program_limit_exceeded54001statement_too_complex54011too_many_columns54023too_many_arguments55000object_not_in_prerequisite_state55006object_in_use55P02cant_change_runtime_param55P03lock_not_available55P04unsafe_new_enum_value_usage57000operator_intervention57014query_canceled57P01admin_shutdown57P02crash_shutdown57P03cannot_connect_now57P04database_dropped57P05idle_session_timeout58000system_error58030io_error58P01undefined_file58P02duplicate_file72000snapshot_too_oldF0000config_file_errorF0001lock_file_existsHV000fdw_errorHV005fdw_column_name_not_foundHV002fdw_dynamic_parameter_value_neededHV010fdw_function_sequence_errorHV021fdw_inconsistent_descriptor_informationHV024fdw_invalid_attribute_valueHV007fdw_invalid_column_nameHV008fdw_invalid_column_numberHV004fdw_invalid_data_typeHV006fdw_invalid_data_type_descriptorsHV091fdw_invalid_descriptor_field_identifierHV00Bfdw_invalid_handleHV00Cfdw_invalid_option_indexHV00Dfdw_invalid_option_nameHV090fdw_invalid_string_length_or_buffer_lengthHV00Afdw_invalid_string_formatHV009fdw_invalid_use_of_null_pointerHV014fdw_too_many_handlesHV001fdw_out_of_memoryHV00Pfdw_no_schemasHV00Jfdw_option_name_not_foundHV00Kfdw_reply_handleHV00Qfdw_schema_not_foundHV00Rfdw_table_not_foundHV00Lfdw_unable_to_create_executionHV00Mfdw_unable_to_create_replyHV00Nfdw_unable_to_establish_connectionP0000plpgsql_errorP0001raise_exceptionP0002no_data_foundP0003too_many_rowsP0004assert_failureXX000internal_errorXX001data_corruptedXX002index_corruptedI have a Multidimensional SSAS Project in my Visual Studio 2017 with SSDT installed..
I need to create a Data Source View with PostgreSQL 10.5 database as a target.
So far I created successfully a Npgsql (v. 11.00) based Data Source connected to my PostgreSQL database. Also, I added successfully a Data Connection for the PostgreSQL database to Server Explorer panel. Now I can see and browse schema
and tables or even retrieve data from PostgreSQL database in the panel.
Next I try to create Data Source View using already existing PostgreSQL Data Source. In the Data Source View Wizard, I select my datasource. No matter which options I select or which tables I choose to work with in the dialogues that follows,
after I click the final Finish button I always retrieve a message box stating that «42601: syntax error at or near ‘[‘» and preventing me from finishing the Data Source View.
I assume the Visual Studio keeps treating the PostgreSQL the way it would treat MS SQL using [table].[column] notation the PostgreSQL doesn’t understand. I’ve proven it catching the select on PostgreSQL using select * from SELECT *
FROM pg_stat_activity; I could see the query of type «SELECT * FROM [schema].[table];» which execution had failed.
After learning this I created new Data Source View based on my PostgreSQL Data Source not selecting any table in the wizard. After I opened the Data Source View in the IDE I tried to create new Named Query. I wrote there a query «SELECT * FROM
schema.table;» and executed it. It failed again. What I could see then was that my query surrounded with outer query of MSSQL type:
SELECT [aaa].* FROM (
SELECT * FROM schema.table
) AS [aaa]
My suspicion is Visual Studio is not aware of the particular type of DBMS it queries.
Is there a solution of this?

