Вставить в PostgreSQL

У меня есть небольшая проблема с SQL. Я пытаюсь вставить 2 значения в мою таблицу.

это мой запрос: INSERT INTO tableinfo (таблица, дата) VALUES ("Продать", "24 августа"); Но это не работает. У меня есть что-то вроде этого:

SQL error:
ERROR:  syntax near "INTO"
LINE 1: SELECT COUNT(*) AS total FROM (INSERT INTO tableinfo (table,...
                                              ^
In statement::
SELECT COUNT(*) AS total FROM (INSERT INTO tableinfo (table,date) VALUES ('Sell','24 August')) AS sub

Это довольно просто, поэтому я не знаю, почему это не работает:( PostgreSQL 9.2.4

4 ответа

Решение

Проблема не в INSERT, а в неверном SQL, который вы пытаетесь выдать. Попробуйте сначала вставить, а затем отдельный запрос count(*), или, если вы используете PostgreSQL 9.1+, вы можете использовать Common Table Expressions и RETURNING.

WITH ins AS (
     insert into tableinfo ("table","date") 
     values ('Sell','24 August') RETURNING "table"
)
select count(*) 
from ins;

Я установил phpPgAdmin, чтобы попытаться воспроизвести вашу ошибку. Я понял это сразу, когда попытался создать тестовую таблицу:

Похоже, phpPgAdmin оборачивает ваш запрос в select count(*) as total from (...), Я обнаружил, что это происходит, только когда установлен флажок "Paginate results" на странице запроса (очевидно, phpPgAdmin пытается подсчитать, сколько строк он получит, а затем показать его постранично). Снимите флажок, и ваш запрос будет работать нормально:

Насколько я знаю ваш вклад в ваш select не является базовой таблицей, где данные были вставлены через insert оператор, но возвращаемое значение оператора вставки (например, RETURNING) которого здесь нет

Взгляните на (отличную) документацию Postgres, особенно with_query_name раздел, где можно использовать вставки.

Сообщение об ошибке не понятно. Но насколько это видно, Вы не можете выбрать из выполняемой операции (INSERT). Оператор SELECT отображается только после выбора из отношения. Альтернативой для вашего случая может быть выполнение двух запросов по отдельности или использование транзакции, если вам разрешено одно выполнение.

Другие вопросы по тегам