Ошибка синтаксиса примерное положение set

0

Делаю запрос в phpPgAdmin
UPDATE films SET kind = ‘Dramatic’ WHERE kind = ‘Drama’;

И он пишет ошибка синтаксиса (примерное положение: «SET»)

Странно, какую бы я таблицу бы не указал, даже которой не существует, всё равно пишет одну и ту же ошибку.

введите сюда описание изображения

  • postgresql

задан 23 мая 2017 в 10:50

manking's user avatar

mankingmanking

6,2936 золотых знаков44 серебряных знака86 бронзовых знаков

2

  • 1

    Э, а разве можно делать from из update?

    23 мая 2017 в 11:00

  • Спасибо, нашел там галочку чтобы убрать счётчик.

    – manking

    23 мая 2017 в 12:09

Добавить комментарий
 | 

Сортировка:

Сброс на вариант по умолчанию

Ваш ответ

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Имя

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Посмотрите другие вопросы с метками

  • postgresql

или задайте свой вопрос.

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»;

восстановить базу из дампа:

-- -- PostgreSQL database dump -- -- Dumped from database version 10.19 (Ubuntu 10.19-0ubuntu0.18.04.1) -- Dumped by pg_dump version 10.19 (Ubuntu 10.19-0ubuntu0.18.04.1) SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- Name: attribute_id_seq; Type: SEQUENCE; Schema: public; Owner: bender -- CREATE SEQUENCE public.attribute_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.attribute_id_seq OWNER TO bender; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: attribute; Type: TABLE; Schema: public; Owner: bender -- CREATE TABLE public.attribute ( attribute_id integer DEFAULT nextval('public.attribute_id_seq'::regclass) NOT NULL, name character varying(30) NOT NULL, attribute_type_id integer NOT NULL ); ALTER TABLE public.attribute OWNER TO bender; -- -- Name: attribute_type_id_seq; Type: SEQUENCE; Schema: public; Owner: bender -- CREATE SEQUENCE public.attribute_type_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.attribute_type_id_seq OWNER TO bender; -- -- Name: attribute_type; Type: TABLE; Schema: public; Owner: bender -- CREATE TABLE public.attribute_type ( attribute_type_id integer DEFAULT nextval('public.attribute_type_id_seq'::regclass) NOT NULL, name character varying(50) NOT NULL ); ALTER TABLE public.attribute_type OWNER TO bender; -- -- Name: film_id_seq; Type: SEQUENCE; Schema: public; Owner: bender -- CREATE SEQUENCE public.film_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.film_id_seq OWNER TO bender; -- -- Name: film; Type: TABLE; Schema: public; Owner: bender -- CREATE TABLE public.film ( film_id integer DEFAULT nextval('public.film_id_seq'::regclass) NOT NULL, name character varying(50) NOT NULL ); ALTER TABLE public.film OWNER TO bender; -- -- Name: film_attributes_id_seq; Type: SEQUENCE; Schema: public; Owner: bender -- CREATE SEQUENCE public.film_attributes_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public.film_attributes_id_seq OWNER TO bender; -- -- Name: film_attributes; Type: TABLE; Schema: public; Owner: bender -- CREATE TABLE public.film_attributes ( film_attributes_id integer DEFAULT nextval('public.film_attributes_id_seq'::regclass) NOT NULL, attribute_id integer NOT NULL, film_id integer NOT NULL, value_text character varying, value_integer integer, value_float double precision, value_boolean boolean, value_timestamp timestamp with time zone ); ALTER TABLE public.film_attributes OWNER TO bender; -- -- Name: film_attributes_values; Type: VIEW; Schema: public; Owner: bender -- CREATE VIEW public.film_attributes_values AS SELECT NULL::character varying(50) AS name, NULL::character varying(50) AS attribute_type, NULL::character varying(30) AS attribute_name, NULL::character varying AS attribute_value; ALTER TABLE public.film_attributes_values OWNER TO bender; -- -- Name: film_tasks; Type: VIEW; Schema: public; Owner: bender -- CREATE VIEW public.film_tasks AS SELECT NULL::character varying(50) AS name, NULL::character varying[] AS today_tasks, NULL::character varying[] AS twenty_days_tasks; ALTER TABLE public.film_tasks OWNER TO bender; -- -- Data for Name: attribute; Type: TABLE DATA; Schema: public; Owner: bender -- COPY public.attribute (attribute_id, name, attribute_type_id) FROM stdin; 1 Рецензии 3 3 Премия Оскар 2 4 Премия Ника 2 5 Премия Золотой Глобус 2 10 Описание фильма 3 11 Длительность (мин.) 1 12 Длительность проката (дней) 1 2 Рейтинг 7 6 Премьера в мире 6 7 Премьера в России 6 8 Старт продажи билетов 6 9 Старт проката 6 13 Окончание проката 6 . -- -- Data for Name: attribute_type; Type: TABLE DATA; Schema: public; Owner: bender -- COPY public.attribute_type (attribute_type_id, name) FROM stdin; 1 integer 2 boolean 3 text 4 date 5 numeric 6 timestamp 7 float . -- -- Data for Name: film; Type: TABLE DATA; Schema: public; Owner: bender -- COPY public.film (film_id, name) FROM stdin; 1 Spoiler-man: No Way 2 Matrix 4 . -- -- Data for Name: film_attributes; Type: TABLE DATA; Schema: public; Owner: bender -- COPY public.film_attributes (film_attributes_id, attribute_id, film_id, value_text, value_integer, value_float, value_boolean, value_timestamp) FROM stdin; 1 1 1 Годный фильм, распинаюсь про сюжет, пишу про игру актеров, все круто N N N N 2 1 2 Джон Уик уже не тот, сестры Вачовски сбрендили, полная фигня N N N N 5 3 1 f N N N N 7 6 2 N N N N 2021-12-10 00:00:00+03 9 7 2 N N N N 2021-12-30 00:00:00+03 10 8 1 N N N N 2021-12-10 00:00:00+03 11 8 2 N N N N 2021-12-07 00:00:00+03 12 12 1 N 21 N N N 13 12 2 N 14 N N N 14 9 1 N N N N 2021-12-15 00:00:00+03 15 9 2 N N N N 2021-12-15 00:00:00+03 16 13 1 N N N N 2022-01-04 00:00:00+03 17 13 2 N N N N 2022-01-04 00:00:00+03 18 3 2 t N N N N 6 6 1 N N N N 2021-12-15 00:00:00+03 8 7 1 N N N N 2022-01-04 00:00:00+03 . -- -- Name: attribute_id_seq; Type: SEQUENCE SET; Schema: public; Owner: bender -- SELECT pg_catalog.setval('public.attribute_id_seq', 13, true); -- -- Name: attribute_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: bender -- SELECT pg_catalog.setval('public.attribute_type_id_seq', 6, true); -- -- Name: film_attributes_id_seq; Type: SEQUENCE SET; Schema: public; Owner: bender -- SELECT pg_catalog.setval('public.film_attributes_id_seq', 18, true); -- -- Name: film_id_seq; Type: SEQUENCE SET; Schema: public; Owner: bender -- SELECT pg_catalog.setval('public.film_id_seq', 2, true); -- -- Name: attribute attribute_pkey; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.attribute ADD CONSTRAINT attribute_pkey PRIMARY KEY (attribute_id); -- -- Name: attribute_type attribute_type_name_key; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.attribute_type ADD CONSTRAINT attribute_type_name_key UNIQUE (name); -- -- Name: attribute_type attribute_type_pkey; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.attribute_type ADD CONSTRAINT attribute_type_pkey PRIMARY KEY (attribute_type_id); -- -- Name: attribute attribute_unq; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.attribute ADD CONSTRAINT attribute_unq UNIQUE (name); -- -- Name: film_attributes film_attributes_pkey; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.film_attributes ADD CONSTRAINT film_attributes_pkey PRIMARY KEY (film_attributes_id); -- -- Name: film film_pkey; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.film ADD CONSTRAINT film_pkey PRIMARY KEY (film_id); -- -- Name: film film_unq; Type: CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.film ADD CONSTRAINT film_unq UNIQUE (name); -- -- Name: attribute_index; Type: INDEX; Schema: public; Owner: bender -- CREATE INDEX attribute_index ON public.attribute USING btree (name COLLATE "C.UTF-8" varchar_ops); -- -- Name: film_index; Type: INDEX; Schema: public; Owner: bender -- CREATE INDEX film_index ON public.film USING btree (name COLLATE "C.UTF-8"); -- -- Name: attribute attribute_type_fkey; Type: FK CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.attribute ADD CONSTRAINT attribute_type_fkey FOREIGN KEY (attribute_type_id) REFERENCES public.attribute_type(attribute_type_id) NOT VALID; -- -- Name: film_attributes film_attribute_attribute_fkey; Type: FK CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.film_attributes ADD CONSTRAINT film_attribute_attribute_fkey FOREIGN KEY (attribute_id) REFERENCES public.attribute(attribute_id); -- -- Name: film_attributes film_attribute_film_fkey; Type: FK CONSTRAINT; Schema: public; Owner: bender -- ALTER TABLE ONLY public.film_attributes ADD CONSTRAINT film_attribute_film_fkey FOREIGN KEY (film_id) REFERENCES public.film(film_id); -- -- PostgreSQL database dump complete --

ERROR: ОШИБКА:  ошибка синтаксиса (примерное положение: "1")
LINE 180: 1 Рецензии 3
^
SQL state: 42601
Character: 4115

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

Dolphin's user avatar

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.

a_horse_with_no_name's user avatar

answered Jul 22, 2021 at 14:32

John K. N.'s user avatar

John K. N.John K. N.

15.7k10 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

nbk's user avatar

nbknbk

7,7295 gold badges12 silver badges27 bronze badges

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

Dolphin's user avatar

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.

a_horse_with_no_name's user avatar

answered Jul 22, 2021 at 14:32

John K. N.'s user avatar

John K. N.John K. N.

15.7k10 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

nbk's user avatar

nbknbk

7,7295 gold badges12 silver badges27 bronze badges

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    информация о разделе

    user posted image Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных — обсуждаем в разделе «Базы данных: общие вопросы». Убедительная просьба — соблюдать «Правила форума» и не пренебрегать «Правильным оформлением своих тем». Прежде, чем создавать тему, имеет смысл заглянуть в раздел «Базы данных: FAQ», возможно там уже есть ответ.

    >
    UPDATE SELECT
    , PostgreSQL 9.4

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    22.03.16, 12:19

      Senior Member

      ****

      Рейтинг (т): 13

      ExpandedWrap disabled

        create table t1 (id integer, f1 integer, f2 integer);

        create table t2 (f1 integer, f2 integer);

        update t1 set (f1, f2) =

        (select t2.f1, t2.f2 from t1 right join t2 on t1.id = t2.f1);

      [Err] ОШИБКА: ошибка синтаксиса (примерное положение: «SELECT»)
      LINE 2: (SELECT
      ^
      Я никак не могу сообразить, как правильно обновлять значения в таблице на основании результатов SELECT .. FROM .. JOIN.
      Подскажите пожалуйста! :wall:


      grgdvo



      Сообщ.
      #2

      ,
      22.03.16, 20:20

        Member

        **

        Рейтинг (т): 21

        какая версия PG у вас?? Такой синтаксис только начиная с 9.5


        HighMan



        Сообщ.
        #3

        ,
        23.03.16, 07:09

          Senior Member

          ****

          Рейтинг (т): 13

          Цитата grgdvo @ 22.03.16, 20:20

          Я в топе указал, что PostgreSQL 9.4.
          Печально, что вышеприведенная конструкция работает лишь с 9.5.
          Но должна же быть схожая конструкция для младших версий.
          Вариант с where = (SELECT …) не интересен.
          Нужно обновление таблицы данными и по условию выборки из других таблиц.

          Master

          MIF



          Сообщ.
          #4

          ,
          23.03.16, 08:31

            Попробуй такой запрос:

            ExpandedWrap disabled

              update t1

              set t1.f1= t2.f1,

              t1.f2 =  t2.f2

              from t1

              right join t2 on t1.id = t2.f1


            grgdvo



            Сообщ.
            #5

            ,
            23.03.16, 12:10

              Member

              **

              Рейтинг (т): 21

              MIF, t1 нельзя указывать и под UPDATE и под FROM.

              HighMan, попробуйте вот так, вроде эквивалентно

              ExpandedWrap disabled

                update t1 set (f1, f2) = (t2.f1, t2.f2)

                from t2 where t1.id = t2.f1;


              HighMan



              Сообщ.
              #6

              ,
              23.03.16, 18:21

                Senior Member

                ****

                Рейтинг (т): 13

                ExpandedWrap disabled

                  update t1 set (f1, f2) = (t2.f1, t2.f2)

                  from t2 where t1.id = t2.f1;

                Такой способ работает, но я не представляю как подобным запросом обрабатывать связи таблиц источников.


                grgdvo



                Сообщ.
                #7

                ,
                23.03.16, 20:16

                  Member

                  **

                  Рейтинг (т): 21

                  Вы можете делать JOIN практически также как в SELECT. Например

                  ExpandedWrap disabled

                    update t1 set (f1, f2) = (t2.f1, t2.f2)

                    from t2, t3 where t1.id = t2.f1 and t2.f2 = t3.id;

                  ExpandedWrap disabled

                    update t1 set (f1, f2) = (t2.f1, t2.f2)

                    from t2 left join t3 on t2.f2 = t3.id where t1.id = t2.f1;

                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                  0 пользователей:

                  • Предыдущая тема
                  • Базы данных: SQL
                  • Следующая тема

                  Рейтинг@Mail.ru

                  [ Script execution time: 0,0592 ]   [ 15 queries used ]   [ Generated: 30.01.23, 16:30 GMT ]  

                  Помогаю со студенческими работами здесь

                  Не запускается PhpPgAdmin в OpenServer
                  Всем привет.
                  Пытаюсь запустить у себя PhpPgAdmin через OpenServer, но появляются ошибки:

                  добавление данных в phpPgAdmin
                  как добавить данные в таблицу phpPgAdmin? вот мои исходники помогите пожалуйста

                  Исходный код…

                  Ошибка синтаксиса на 10 строке (ошибка 1064)
                  //ошибка синтаксиса на 10 строке (ошибка 1064)
                  CREATE TABLE InternetProvayder.Contract (…

                  Ошибка в запросе на вставку: ошибка синтаксиса
                  private void button2_Click(object sender, EventArgs e)
                  {
                  goods = null;

                  Установка PhpPgAdmin и Configuration error
                  Доброго времени суток!

                  Установил Open Server 5.2.2. Пытаюсь запустить phpPgAdmin, открывая…

                  Ошибка добавления в postgresql
                  Добрый день, пытаюсь добавить объект в базу, используя postresql, при попытке добавить в стеке…

                  Искать еще темы с ответами

                  Или воспользуйтесь поиском по форуму:

                     UPDATE m_price
                     SET pricelist=15.159, pricestd=14.3184
                     WHERE m_product_id = 1000332
                  

                  ERROR: syntax error at or near «SET» i am getting this error in POSTGRESQL.

                  table structure

                  CREATE TABLE m_price (
                  m_pricelist_version_id numeric(10,0) NOT NULL,
                  m_product_id numeric(10,0) NOT NULL,
                  ad_client_id numeric(10,0) NOT NULL,
                  ad_org_id numeric(10,0) NOT NULL,
                  isactive character(1) DEFAULT 'Y'::bpchar NOT NULL,
                  created timestamp without time zone DEFAULT now() NOT NULL,
                  createdby numeric(10,0) NOT NULL,
                  updated timestamp without time zone DEFAULT now() NOT NULL,
                  updatedby numeric(10,0) NOT NULL,
                  pricelist numeric DEFAULT 0 NOT NULL,
                  pricestd numeric DEFAULT 0 NOT NULL,
                  pricelimit numeric DEFAULT 0 NOT NULL,
                  CONSTRAINT m_productprice_isactive_check CHECK ((isactive = ANY (ARRAY['Y'::bpchar,  'N'::bpchar])))
                         );
                  

                  У меня есть следующий подготовленный запрос и его последующее извлечение

                  postgreSQL_select_Query = "UPDATE %s SET %s = %s WHERE %s = %s"
                  cursor.execute(postgreSQL_select_Query, (table,sql_attr,sql,id_attr,id,))

                  При извлечении я получаю такую ошибку:

                  psycopg.errors.SyntaxError: ошибка синтаксиса (примерное положение: "$1")
                  LINE 1: UPDATE $1 SET $2 = $3 WHERE $4 = $5

                  Не понимаю, почему ошибка выглядит так. С подстановкой только id работает.
                  Я практически уверен, что таблицу и атрибут нельзя сделать динамическими в запросе, но я не могу понять почему такая ошибка. Ведь даже значение не подставилось.

                  P.s библиотека используется следующая — psycopg

                  Содержание

                  1. PostgreSQL error 42601- How we fix it
                  2. What causes error 42601 in PostgreSQL?
                  3. How we fix the error?
                  4. Conclusion
                  5. PREVENT YOUR SERVER FROM CRASHING!
                  6. 10 Comments
                  7. [Error] 42601: syntax error at or near «SELECT» on pgsql 9.2.5 #813
                  8. Comments
                  9. PostgreSQL – SQL state: 42601 syntax error
                  10. Solution
                  11. Related Articles

                  PostgreSQL error 42601- How we fix it

                  by Sijin George | Sep 12, 2019

                  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,

                  But, this ended up in PostgreSQL error 42601. And he got the following error message,

                  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,

                  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.

                  SELECT * FROM long_term_prediction_anomaly WHERE + “‘Timestamp’” + ‘”BETWEEN ‘” +
                  2019-12-05 09:10:00+ ‘”AND’” + 2019-12-06 09:10:00 + “‘;”)

                  Hello Joe,
                  Do you still get PostgreSQL errors? If you need help, we’ll be happy to talk to you on chat (click on the icon at right-bottom).

                  У меня ошибка drop table exists “companiya”;

                  CREATE TABLE “companiya” (
                  “compania_id” int4 NOT NULL,
                  “fio vladelca” text NOT NULL,
                  “name” text NOT NULL,
                  “id_operator” int4 NOT NULL,
                  “id_uslugi” int4 NOT NULL,
                  “id_reklama” int4 NOT NULL,
                  “id_tex-specialist” int4 NOT NULL,
                  “id_filial” int4 NOT NULL,
                  CONSTRAINT “_copy_8” PRIMARY KEY (“compania_id”)
                  );

                  CREATE TABLE “filial” (
                  “id_filial” int4 NOT NULL,
                  “street” text NOT NULL,
                  “house” int4 NOT NULL,
                  “city” text NOT NULL,
                  CONSTRAINT “_copy_5” PRIMARY KEY (“id_filial”)
                  );

                  CREATE TABLE “login” (
                  “id_name” int4 NOT NULL,
                  “name” char(20) NOT NULL,
                  “pass” char(20) NOT NULL,
                  PRIMARY KEY (“id_name”)
                  );

                  CREATE TABLE “operator” (
                  “id_operator” int4 NOT NULL,
                  “obrabotka obrasheniya” int4 NOT NULL,
                  “konsultirovanie” text NOT NULL,
                  “grafick work” date NOT NULL,
                  CONSTRAINT “_copy_2” PRIMARY KEY (“id_operator”)
                  );

                  CREATE TABLE “polsovateli” (
                  “id_user” int4 NOT NULL,
                  “id_companiya” int4 NOT NULL,
                  “id_obrasheniya” int4 NOT NULL,
                  “id_oshibka” int4 NOT NULL,
                  CONSTRAINT “_copy_6” PRIMARY KEY (“id_user”)
                  );

                  CREATE TABLE “reklama” (
                  “id_reklama” int4 NOT NULL,
                  “tele-marketing” text NOT NULL,
                  “soc-seti” text NOT NULL,
                  “mobile” int4 NOT NULL,
                  CONSTRAINT “_copy_3” PRIMARY KEY (“id_reklama”)
                  );

                  CREATE TABLE “tex-specialist” (
                  “id_tex-specialist” int4 NOT NULL,
                  “grafik” date NOT NULL,
                  “zarplata” int4 NOT NULL,
                  “ispravlenie oshibok” int4 NOT NULL,
                  CONSTRAINT “_copy_7” PRIMARY KEY (“id_tex-specialist”)
                  );

                  CREATE TABLE “uslugi” (
                  “id_uslugi” int4 NOT NULL,
                  “vostanavlenia parola” int4 NOT NULL,
                  “poterya acaunta” int4 NOT NULL,
                  CONSTRAINT “_copy_4” PRIMARY KEY (“id_uslugi”)
                  );

                  ALTER TABLE “companiya” ADD CONSTRAINT “fk_companiya_operator_1” FOREIGN KEY (“id_operator”) REFERENCES “operator” (“id_operator”);
                  ALTER TABLE “companiya” ADD CONSTRAINT “fk_companiya_uslugi_1” FOREIGN KEY (“id_uslugi”) REFERENCES “uslugi” (“id_uslugi”);
                  ALTER TABLE “companiya” ADD CONSTRAINT “fk_companiya_filial_1” FOREIGN KEY (“id_filial”) REFERENCES “filial” (“id_filial”);
                  ALTER TABLE “companiya” ADD CONSTRAINT “fk_companiya_reklama_1” FOREIGN KEY (“id_reklama”) REFERENCES “reklama” (“id_reklama”);
                  ALTER TABLE “companiya” ADD CONSTRAINT “fk_companiya_tex-specialist_1” FOREIGN KEY (“id_tex-specialist”) REFERENCES “tex-specialist” (“id_tex-specialist”);
                  ALTER TABLE “polsovateli” ADD CONSTRAINT “fk_polsovateli_companiya_1” FOREIGN KEY (“id_companiya”) REFERENCES “companiya” (“compania_id”);

                  ERROR: ОШИБКА: ошибка синтаксиса (примерное положение: “”companiya””)
                  LINE 1: drop table exists “companiya”;
                  ^

                  Источник

                  [Error] 42601: syntax error at or near «SELECT» on pgsql 9.2.5 #813

                  When trying to remove or update an object from DB i get this exception on pgsql 9.2.5. On 9.4 it works fine.

                  Npgsql: npgsql-3.1-alpha0058
                  EF: 6.1.3
                  posgresql: postgresql92-9.2.5-1PGDG.rhel6.x86_64

                  [Error] 42601: syntax error at or near «SELECT» — at Npgsql.NpgsqlConnector.DoReadSingleMessage (DataRowLoadingMode dataRowLoadingMode, Boolean returnNullForAsyncMessage, Boolean isPrependedMessage) [0x00000] in :0
                  at Npgsql.NpgsqlConnector.ReadSingleMessageWithPrepended (DataRowLoadingMode dataRowLoadingMode, Boolean returnNullForAsyncMessage) [0x00000] in :0

                  2015-10-07 19:13:17.082 CEST [9318]: LOG: statement: DISCARD ALL
                  2015-10-07 19:13:17.083 CEST [9318]: ERROR: syntax error at or near «SELECT» at character 4857
                  2015-10-07 19:13:17.083 CEST [9318]: STATEMENT: SELECT «Project4».»Id1″ AS «Id», «Project4″.»Id» AS «Id1», «Project4″.»Name», «Project4″.»DatastoreRef», «Project4″.»DatastoreName», «Project4″.»TestNetworkName», «Project4″.»TestNetworkRef», «Project4″.»TestNetworkVLanId», «Project4″.»RecoveryNetworkName», «Project4″.»RecoveryNetworkRef», «Project4″.»RecoveryNetworkVLanId», «Project4″.»ResourcePoolName», «Project4″.»ResourcePoolRef», «Project4″.»ComputeResourceName», «Project4″.»ComputeResourceRef», «Project4″.»FolderName», «Project4″.»FolderRef», «Project4″.»PowerOnTimeoutMin», «Project4″.»DestinationPath», «Project4″.»Status», «Project4″.»MaxRecoveryPoint», «Project4″.»ServerId», «Project4″.»Enabled», «Project4″.»StartDateTime», «Project4″.»DaysOfWeek», «Project4″.»Interval», «Project4».»C1″, «Project4″.»IntervalUnit», «Project4″.»EndDateTime», «Project4″.»DateTimeFormat_DateFormat», «Project4″.»DateTimeFormat_TimeFormat», «Project4″.»DateTimeFormat_TimeZoneId», «Project4».»C35″ AS «C2», «Project4».»C3″, «Project4».»C4″, «Project4».»C5″, «Project4».»C6″, «Project4».»C7″, «Project4».»C8″, «Project4».»C9″, «Project4».»C10″, «Project4».»C11″, «Project4».»C12″, «Project4».»C13″, «Project4».»C14″, «Project4».»C2″ AS «C15», «Project4».»C15″ AS «C16», «Project4».»C16″ AS «C17», «Project4».»C17″ AS «C18», «Project4».»C18″ AS «C19», «Project4».»C19″ AS «C20», «Project4».»C20″ AS «C21», «Project4».»C21″ AS «C22», «Project4».»C22″ AS «C23», «Project4».»C23″ AS «C24», «Project4».»C24″ AS «C25», «Project4».»C25″ AS «C26», «Project4».»C26″ AS «C27», «Project4».»C27″ AS «C28», «Project4».»C28″ AS «C29», «Project4».»C29″ AS «C30», «Project4».»C30″ AS «C31», «Project4».»C31″ AS «C32», «Project4».»C32″ AS «C33», «Project4».»C33″ AS «C34», «Project4».»C34″ AS «C35» FROM (SELECT «Alias1″.»Id», «Alias1″.»Name», «Alias1″.»DatastoreRef», «Alias1″.»DatastoreName», «Alias1″.»TestNetworkName», «Alias1″.»TestNetworkRef», «Alias1″.»TestNetworkVLanId», «Alias1″.»RecoveryNetworkName», «Alias1″.»RecoveryNetworkRef», «Alias1″.»RecoveryNetworkVLanId», «Alias1″.»ResourcePoolName», «Alias1″.»ResourcePoolRef», «Alias1″.»ComputeResourceName», «Alias1″.»ComputeResourceRef», «Alias1″.»FolderName», «Alias1″.»FolderRef», «Alias1″.»PowerOnTimeoutMin», «Alias1″.»DestinationPath», «Alias1″.»Status», «Alias1″.»MaxRecoveryPoint», «Alias1″.»ServerId», «Alias1».»Id1″, «Alias1″.»Enabled», «Alias1″.»StartDateTime», «Alias1″.»DaysOfWeek», «Alias1″.»Interval», «Alias1″.»IntervalUnit», «Alias1″.»EndDateTime», «Alias1″.»DateTimeFormat_DateFormat», «Alias1″.»DateTimeFormat_TimeFormat», «Alias1″.»DateTimeFormat_TimeZoneId», «Alias1».»C1″, «UnionAll1».»C1″ AS «C2», «UnionAll1″.»Id» AS «C3», «UnionAll1».»Id1″ AS «C4», «UnionAll1″.»InstanceId» AS «C5», «UnionAll1″.»Name» AS «C6», «UnionAll1″.»Ref» AS «C7», «UnionAll1″.»IsPhysical» AS «C8», «UnionAll1″.»BackupId» AS «C9», «UnionAll1″.»JobId» AS «C10», «UnionAll1″.»OSUsername» AS «C11», «UnionAll1″.»OSUserPwd» AS «C12», «UnionAll1″.»OSType» AS «C13», «UnionAll1″.»SnapshotRef» AS «C14», «UnionAll1».»Id2″ AS «C15», «UnionAll1».»Id3″ AS «C16», «UnionAll1″.»MacAdresss» AS «C17», «UnionAll1″.»NicLabel» AS «C18», «UnionAll1″.»NetworkConfigId» AS «C19», «UnionAll1″.»VirtualMachine_Id» AS «C20», «UnionAll1».»C2″ AS «C21», «UnionAll1».»C3″ AS «C22», «UnionAll1».»C4″ AS «C23», «UnionAll1».»C5″ AS «C24», «UnionAll1».»C6″ AS «C25», «UnionAll1».»C7″ AS «C26», «UnionAll1».»C8″ AS «C27», «UnionAll1».»C9″ AS «C28», «UnionAll1».»C10″ AS «C29», «UnionAll1».»C11″ AS «C30», «UnionAll1».»C12″ AS «C31», «UnionAll1».»C13″ AS «C32», «UnionAll1».»C14″ AS «C33», «UnionAll1».»C15″ AS «C34», CASE WHEN («UnionAll1″.»Id» IS NULL) THEN (CAST (NULL AS int4)) ELSE (1) END AS «C35» FROM (SELECT «Extent1″.»Id», «Extent1″.»Name», «Extent1″.»DatastoreRef», «Extent1″.»DatastoreName», «Extent1″.»TestNetworkName», «Extent1″.»TestNetworkRef», «Extent1″.»TestNetworkVLanId», «Extent1″.»RecoveryNetworkName», «Extent1″.»RecoveryNetworkRef», «Extent1″.»RecoveryNetworkVLanId», «Extent1″.»ResourcePoolName», «Extent1″.»ResourcePoolRef», «Extent1″.»ComputeResourceName», «Extent1″.»ComputeResourceRef», «Extent1″.»FolderName», «Extent1″.»FolderRef», «Extent1″.»PowerOnTimeoutMin», «Extent1″.»DestinationPath», «Extent1″.»Status», «Extent1″.»MaxRecoveryPoint», «Extent1″.»ServerId», «Extent2″.»Id» AS «Id1», «Extent2″.»Enabled», «Extent2″.»StartDateTime», «Extent2″.»DaysOfWeek», «Extent2″.»Interval», «Extent2″.»IntervalUnit», «Extent2″.»EndDateTime», «Extent2″.»DateTimeFormat_DateFormat», «Extent2″.»DateTimeFormat_TimeFormat», «Extent2″.»DateTimeFormat_TimeZoneId», CASE WHEN («Extent2″.»Id» IS NULL) THEN (CAST (NULL AS int2)) ELSE (CAST («Extent2″.»IntervalValue» AS int2)) END AS «C1» FROM «public».»jobs» AS «Extent1» LEFT OUTER JOIN «public».»schedules» AS «Extent2» ON «Extent1″.»Id» = «Extent2″.»Id» WHERE «Extent1″.»Id» = $1 LIMIT 1) AS «Alias1» LEFT OUTER JOIN LATERAL (SELECT «UnionAll1».»C1″, «UnionAll1″.»Id», «UnionAll1».»Id1″, «UnionAll1″.»InstanceId», «UnionAll1″.»Name», «UnionAll1″.»Ref», «UnionAll1″.»IsPhysical», «UnionAll1″.»BackupId», «UnionAll1″.»JobId», «UnionAll1″.»OSUsername», «UnionAll1″.»OSUserPwd», «UnionAll1″.»OSType», «UnionAll1″.»SnapshotRef», «UnionAll1».»Id2″, «UnionAll1».»Id3″, «UnionAll1″.»MacAdresss», «UnionAll1″.»NicLabel», «UnionAll1″.»NetworkConfigId», «UnionAll1″.»VirtualMachine_Id», «UnionAll1».»C2″, «UnionAll1».»C3″, «UnionAll1».»C4″, «UnionAll1».»C5″, «UnionAll1».»C6″, «UnionAll1».»C7″, «UnionAll1».»C8″, «UnionAll1».»C9″, «UnionAll1».»C10″, «UnionAll1».»C11″, «UnionAll1».»C12″, «UnionAll1».»C13″, «UnionAll1».»C14″, «UnionAll1».»C15″ FROM ((SELECT CASE WHEN («Extent4″.»Id» IS NULL) THEN (CAST (NULL AS int4)) ELSE (1) END AS «C1», «Extent3″.»Id», «Extent3″.»Id» AS «Id1», «Extent3″.»InstanceId», «Extent3″.»Name», «Extent3″.»Ref», «Extent3″.»IsPhysical», «Extent3″.»BackupId», «Extent3″.»JobId», «Extent3″.»OSUsername», «Extent3″.»OSUserPwd», «Extent3″.»OSType», «Extent3″.»SnapshotRef», «Extent4″.»Id» AS «Id2», «Extent4″.»Id» AS «Id3», «Extent4″.»MacAdresss», «Extent4″.»NicLabel», «Extent4″.»NetworkConfigId», «Extent4″.»VirtualMachine_Id», CAST (NULL AS int4) AS «C2», CAST (NULL AS int4) AS «C3», CAST (NULL AS text) AS «C4», CAST (NULL AS text) AS «C5», CAST (NULL AS bool) AS «C6», CAST (NULL AS int4) AS «C7», CAST (NULL AS int4) AS «C8», CAST (NULL AS int4) AS «C9», CAST (NULL AS int4) AS «C10», CAST (NULL AS int4) AS «C11», CAST (NULL AS int4) AS «C12», CAST (NULL AS text) AS «C13», CAST (NULL AS text) AS «C14», CAST (NULL AS int4) AS «C15» FROM «public».»vms» AS «Extent3» LEFT OUTER JOIN «public».»vm_net» AS «Extent4» ON «Extent3″.»Id» = «Extent4″.»VirtualMachine_Id» WHERE «Alias1″.»Id» = «Extent3″.»JobId») UNION ALL (SELECT 2 AS «C1», «Extent5″.»Id», «Extent5″.»Id» AS «Id1», «Extent5″.»InstanceId», «Extent5″.»Name», «Extent5″.»Ref», «Extent5″.»IsPhysical», «Extent5″.»BackupId», «Extent5″.»JobId», «Extent5″.»OSUsername», «Extent5″.»OSUserPwd», «Extent5″.»OSType», «Extent5″.»SnapshotRef», CAST (NULL AS int4) AS «C2», CAST (NULL AS int4) AS «C3», CAST (NULL AS text) AS «C4», CAST (NULL AS text) AS «C5», CAST (NULL AS int4) AS «C6», CAST (NULL AS int4) AS «C7», «Extent6″.»Id» AS «Id2», «Extent6″.»Id» AS «Id3», «Extent6″.»Name» AS «Name1», «Extent6″.»Command», «Extent6″.»IsCustom», «Extent6″.»TimeoutMin», «Extent6″.»Priority», «Extent6″.»VirtualMachine_Id», CASE WHEN («Extent7″.»Id» IS NULL) THEN (CAST (NULL AS int4)) ELSE (1) END AS «C8», «Extent7″.»Id» AS «Id4», «Extent7″.»Id» AS «Id5», «Extent7″.»Name» AS «Name2», «Extent7″.»Value», «Extent7″.»VirtualMachineApplicationTest_Id» FROM «public».»vms» AS «Extent5» INNER JOIN «public».»vm_test» AS «Extent6» LEFT OUTER JOIN «public».»vm_testparam» AS «Extent7» ON «Extent6″.»Id» = «Extent7″.»VirtualMachineApplicationTest_Id» ON «Extent5″.»Id» = «Extent6″.»VirtualMachine_Id» WHERE «Alias1″.»Id» = «Extent5″.»JobId»)) AS «UnionAll1») AS «UnionAll1» ON TRUE) AS «Project4» ORDER BY «Project4″.»Id1″ ASC ,»Project4″.»Id» ASC ,»Project4″.»C35″ ASC ,»Project4″.»C4″ ASC ,»Project4″.»C2″ ASC ,»Project4″.»C22″ ASC ,»Project4″.»C29″ ASC
                  2015-10-07 19:13:18.221 CEST [9318]: LOG: statement: DISCARD ALL
                  2015-10-07 19:13:18.221 CEST [9318]: ERROR: syntax error at or near «SELECT» at character 4857

                  The text was updated successfully, but these errors were encountered:

                  Источник

                  PostgreSQL – SQL state: 42601 syntax error

                  Posted By: Anonymous

                  I would like to know how to use a dynamic query inside a function. I’ve tried lots of ways, however, when I try to compile my function a message SQL 42601 is displayed.

                  The code that I use:

                  Error message I receive:

                  What is wrong? How can I solve this problem?

                  Solution

                  Your function would work like this:

                  You cannot mix plain and dynamic SQL the way you tried to do it. The whole statement is either all dynamic or all plain SQL. So I am building one dynamic statement to make this work. You may be interested in the chapter about executing dynamic commands in the manual.

                  The aggregate function count() returns bigint , but you had rowcount defined as integer , so you need an explicit cast ::int to make this work

                  I use dollar quoting to avoid quoting hell.

                  However, is this supposed to be a honeypot for SQL injection attacks or are you seriously going to use it? For your very private and secure use, it might be ok-ish – though I wouldn’t even trust myself with a function like that. If there is any possible access for untrusted users, such a function is a loaded footgun. It’s impossible to
                  make this secure.

                  Craig (a sworn enemy of SQL injection!) might get a light stroke, when he sees what you forged from his piece of code in the answer to your preceding question. 🙂

                  The query itself seems rather odd, btw. But that’s beside the point here.

                  Answered By: Anonymous

                  Related Articles

                  Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.

                  Источник

                  Понравилась статья? Поделить с друзьями:

                  Не пропустите эти материалы по теме:

                • Яндекс еда ошибка привязки карты
                • Ошибка синтаксиса примерное положение select
                • Ошибка синий экран stop 0x000000d1
                • Ошибка синий экран nvlddmkm sys
                • Ошибка синий экран iusb3xhc sys

                • 0 0 голоса
                  Рейтинг статьи
                  Подписаться
                  Уведомить о
                  guest

                  0 комментариев
                  Старые
                  Новые Популярные
                  Межтекстовые Отзывы
                  Посмотреть все комментарии