2013-08-24 3 views
3

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

это мой запрос: INSERT INTO tableinfo (таблица, дата) ЗНАЧЕНИЯ («Продать», «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

+0

Что такое сообщение об ошибке? – Jost

+0

Вы не можете комбинировать вставку и SELECT. Чего вы пытаетесь достичь? (И вы можете переключить psql на английские сообщения об ошибках, чтобы все могли их прочитать). –

+1

Вы используете phpAdmin? –

ответ

4

Это не ВСТАВИТЬ, что это проблема, это инвалиду SQL, что вы пытаетесь выдать. Попробуйте вставить первый затем отдельный счет (*) запрос, или если вы используете PostgreSQL 9.1+ вы можете использовать Common Table Expressions и ВОЗВРАТ

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

[Редактирование данных CTEs a.k.a. для записи CTE] (http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING) доступны с Postgres 9.1. –

+0

О, хорошо, я всегда забываю об этом - я пропустил с 9.0 до 9.2 в производство. Спасибо, я обновлю свой ответ, чтобы это отразить. – bma

0

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

+0

Вы * можете * выбрать из результата инструкции 'INSERT'. См. Ответ bma. Но совершенно непонятно (по крайней мере для меня) то, что на самом деле пытается сделать ОП. –

0

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

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

3

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

enter image description here

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

enter image description here

+0

Ницца! +1 – bma

+0

хороший день, новое английское слово для моей грамматики :) –

Смежные вопросы