Мы должны попытаться снять с кавычки это сообщение об ошибке, чтобы немного яснее увидеть, что здесь происходит. Мы можем сделать это в приглашении 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», которую он вставляет в перед линии, которая его перепутала. Возможно, ваша вырезка и вставка в переполнение стека разрушили несколько последовательных пробелов, что может произойти, если ваш редактор или браузер были в неприятном настроении.
Так что я не могу точно сказать, где в строке произошла ошибка, но у меня есть очень сильное предположение: каким-то образом тройные кавычки 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, и мы поможем вам выяснить, как буквальные кавычки оказываются внутри ваших строк!