3

I have got a little problem with SQL. I'm trying to insert 2 values into my table.

that's my query: INSERT INTO tableinfo (table,date) VALUES ('Sell','24 August'); But it doesnt work. I've got something like that:

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

It's pretty basic so I don't know why it doesnt work :( PostgreSQL 9.2.4

4
  • What is the error message? Commented Aug 24, 2013 at 16:39
  • You cannot combine an insert and a SELECT like that. What are you trying to achieve? (And you might want to switch psql to english error messages so that everybody here can read them). Commented Aug 24, 2013 at 16:39
  • 1
    are you using phpAdmin? Commented Aug 24, 2013 at 16:43
  • 2
    Btw: the value for count(*) will always be exactly 1 (one) because you are trying to insert a single row - so I don't understand what the count() is inteded for. Commented Aug 24, 2013 at 16:44

4 Answers 4

5

I've installed phpPgAdmin to try to reproduce your error. I got it right away when tried to create a test table:

enter image description here

So looks like phpPgAdmin wraping your query into select count(*) as total from (...). I've found that it happens only when checkbox "Paginate results" on query page is set to on (obviously phpPgAdmin trying to count how many rows it will get and then show it page by page). Uncheck it and your query will work fine:

enter image description here

Sign up to request clarification or add additional context in comments.

1 Comment

I unchecked the paginate results and all works fine.
4

It's not the INSERT that is the problem, it is the invalid SQL that you are trying to issue. Try your insert first then a separate count(*) query, or if you are using PostgreSQL 9.1+ you can use Common Table Expressions and RETURNING

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

2 Comments

Data-modifying CTEs a.k.a. writable CTEs are available since Postgres 9.1.
Oh right, I always forget that -- I skipped from 9.0 to 9.2 in production. Thanks, I'll update my answer to reflect that.
0

The error message is not understandable. But as far as it is visible, You cannot select from an operation performed (INSERT). SELECT statement only displays after selecting from a relation. An alternative for your case would be to either execute the 2 queries separately,or use a transaction, if you are allowed a single execution.

1 Comment

You can select from the result of an INSERT statement. See bma's answer. But it's totally unclear (at least to me) what the OP is actually trying to do.
0

As far as I know your the input to your select is not the underlying table where the data was inserted via the insert statement, but the return value of the insert statement (e.g. RETURNING) which is missing here.

Have a look at the (excellent) Postgres documentation especially the with_query_name section where inserts can be used.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.