Трябва да опитаме да отменим цитирането на това съобщение за грешка, за да видим малко по-ясно какво се случва тук. Можем да направим това в подканата на Python:
>>> message = 'syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E\'A\')""""\nLINE 1: """INSERT INTO dimension (id, name) VALUES (1, E\'A\n ^\n'
>>> print message
syntax error at or near """"INSERT INTO dimension (id, name) VALUES (1, E'A')""""
LINE 1: """INSERT INTO dimension (id, name) VALUES (1, E'A
^
Ааа, много по-добре.
Обикновено Postgres внимава да използва малкия ^
символ, който да сочи към точното място в реда, където се е объркал – но тук той сочи към средата на етикета „Ред 1“, който поставя отпред отпред на линията, която го е объркала. Вероятно вашето изрязване и поставяне в Stack Overflow е свило няколко последователни интервала заедно, което може да се случи, ако вашият редактор или браузър са били в неприятно настроение.
Така че не мога да кажа точно къде в реда е възникнала грешката, но имам много силно предположение:по някакъв начин тройните кавички на Python, с които се опитвате да оградите изявлението си, всъщност се предават на Postgres! След няколко минути игра на подканата на Postgres, единственият начинът, по който мога да намеря да получа съобщение за „синтактична грешка“, чийто „LINE“ започва с тройни кавички, е всъщност да напиша тройните кавички ръчно в SQL, където те не принадлежат (тъй като Postgres не разбира тройни кавички; това е Python конвенция):
$ psql postgres
Null display is "NULL".
psql (8.4.8)
Type "help" for help.
postgres=# """SELECT 1""";
ERROR: syntax error at or near """"SELECT 1""""
LINE 1: """SELECT 1""";
^
Проблемът е, че тази грешка е невъзможна с примерния код, който сте показали. За да получите тази грешка, всъщност трябваше да въведете код на Python по следния начин:
cur.executemany('"""INSERT INTO ddmension(id,name) ..."""', data)
Има и други начини да получите тройни кавички вътре в низ на Python, но този е най-лесният. Във всеки случай вашето съобщение за грешка в Postgres със сигурност показва, че във вашия SQL влизат тройни кавички, така че опитайте да проверите кода си на Python отново и ние ще ви помогнем да разберете как буквалните кавички се навиват във вашите низове!