Обсуждение: problem inserting with sequence

Поиск
Список
Период
Сортировка

problem inserting with sequence

От
germ germ
Дата:
I have been trying to figure out why I can't insert
into a table and I think it has something to do with
the sequnce.

I am able to use able to properly insert into the
table using the the shell, but I am not able to insert
using a php script:

INSERT INTO requests (time_stamp, req_num,
recommended_by) VALUES (now(),
nextval('requests_req_num_seq'), 'foo');

Here is the schema I'm using:
DROP SEQUENCE requests_req_num_seq;
DROP TABLE requests;

CREATE SEQUENCE requests_req_num_seq INCREMENT BY 1
START WITH 1000;

CREATE TABLE requests (
    time_stamp         timestamp    PRIMARY KEY DEFAULT 'now',
    req_num            integer        DEFAULT
nextval('acq_requests_req_num_seq') NOT NULL,
    recommended_by        varchar(35)    NOT NULL
);
GRANT ALL ON requests TO wwwrun, postgres;

If I reconfigure the schema by removing the sequence
from the table, I am able to insert into the table
using both the shell and php script:
DROP SEQUENCE requests_req_num_seq;
DROP TABLE requests;

CREATE SEQUENCE requests_req_num_seq INCREMENT BY 1
START WITH 1000;

CREATE TABLE requests (
    time_stamp         timestamp    PRIMARY KEY DEFAULT 'now',
    recommended_by        varchar(35)    NOT NULL
);

INSERT INTO requests (time_stamp, recommended_by)
VALUES (now(), 'foo');

I'm a little stumped on this one. I'm running
PostgreSQL 7.4.8 on i686-pc-linux-gnu, compiled by GCC
gcc (GCC) 3.3.3 (SuSE Linux).

Thanks in advance for any help or advice.



__________________________________
Yahoo! Mail for Mobile
Take Yahoo! Mail with you! Check email on your mobile phone.
http://mobile.yahoo.com/learn/mail

Re: problem inserting with sequence

От
Gnanavel S
Дата:


On 7/28/05, germ germ <super_code_monkey@yahoo.com> wrote:
I have been trying to figure out why I can't insert
into a table and I think it has something to do with
the sequnce.

I am able to use able to properly insert into the
table using the the shell, but I am not able to insert
using a php script:

INSERT INTO requests (time_stamp, req_num,
recommended_by) VALUES (now(),
nextval('requests_req_num_seq'), 'foo');

Here is the schema I'm using:
DROP SEQUENCE requests_req_num_seq;
DROP TABLE requests;

CREATE SEQUENCE requests_req_num_seq INCREMENT BY 1
START WITH 1000;

CREATE TABLE requests (
        time_stamp              timestamp       PRIMARY KEY DEFAULT 'now',
        req_num                 integer         DEFAULT
nextval('acq_requests_req_num_seq') NOT NULL,

 where is this sequence 'acq_requests_req_num_seq' created. You have created only 'requests_req_num_seq'

        recommended_by          varchar(35)     NOT NULL
);
GRANT ALL ON requests TO wwwrun, postgres;

If I reconfigure the schema by removing the sequence
from the table, I am able to insert into the table
using both the shell and php script:
DROP SEQUENCE requests_req_num_seq;
DROP TABLE requests;

CREATE SEQUENCE requests_req_num_seq INCREMENT BY 1
START WITH 1000;

CREATE TABLE requests (
        time_stamp              timestamp       PRIMARY KEY DEFAULT 'now',
        recommended_by          varchar(35)     NOT NULL
);

INSERT INTO requests (time_stamp, recommended_by)
VALUES (now(), 'foo');

I'm a little stumped on this one. I'm running
PostgreSQL 7.4.8 on i686-pc-linux-gnu, compiled by GCC
gcc (GCC) 3.3.3 (SuSE Linux).

Thanks in advance for any help or advice.



__________________________________
Yahoo! Mail for Mobile
Take Yahoo! Mail with you! Check email on your mobile phone.
http://mobile.yahoo.com/learn/mail

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings



--
with regards,
S.Gnanavel
Satyam Computer Services Ltd.

Re: problem inserting with sequence

От
Michael Fuhr
Дата:
On Thu, Jul 28, 2005 at 05:32:03AM -0700, germ germ wrote:
> I have been trying to figure out why I can't insert
> into a table and I think it has something to do with
> the sequnce.
>
> I am able to use able to properly insert into the
> table using the the shell, but I am not able to insert
> using a php script:
>
> INSERT INTO requests (time_stamp, req_num,
> recommended_by) VALUES (now(),
> nextval('requests_req_num_seq'), 'foo');

What happens when you try the insert?  We need more details than
just "it doesn't work."  If there's an error then it should be in
the postmaster logs, and it should also be available to the PHP
script.

What's different between the situation that works and the one that
doesn't?  Are you connecting as different users?  In the code you
posted I don't see any permissions being granted on the sequence,
so nextval() might be failing with "permission denied for sequence";
another possibility is that the sequence name is wrong (see below).

> Here is the schema I'm using:
> DROP SEQUENCE requests_req_num_seq;
> DROP TABLE requests;
>
> CREATE SEQUENCE requests_req_num_seq INCREMENT BY 1
> START WITH 1000;
>
> CREATE TABLE requests (
>     time_stamp         timestamp    PRIMARY KEY DEFAULT 'now',

A timestamp is a poor choice for a primary key because it's not
unique; aside from that you've defined the default to be a constant --
run "\d requests" in psql and you'll see what I mean.  See the
following section of the documentation for more info:

http://www.postgresql.org/docs/7.4/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT

>     req_num            integer        DEFAULT
> nextval('acq_requests_req_num_seq') NOT NULL,

This sequence name doesn't match the name of the sequence you created,
at least not the one you showed.  Is there an acq_requests_req_num_seq
sequence?

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

Re: problem inserting with sequence

От
Richard Huxton
Дата:
germ germ wrote:
> I have been trying to figure out why I can't insert
> into a table and I think it has something to do with
> the sequnce.
>
> I am able to use able to properly insert into the
> table using the the shell, but I am not able to insert
> using a php script:
>
> INSERT INTO requests (time_stamp, req_num,
> recommended_by) VALUES (now(),
> nextval('requests_req_num_seq'), 'foo');
>
> Here is the schema I'm using:
> DROP SEQUENCE requests_req_num_seq;
> DROP TABLE requests;
>
> CREATE SEQUENCE requests_req_num_seq INCREMENT BY 1
> START WITH 1000;
>
> CREATE TABLE requests (
>     time_stamp         timestamp    PRIMARY KEY DEFAULT 'now',
>     req_num            integer        DEFAULT
> nextval('acq_requests_req_num_seq') NOT NULL,
>     recommended_by        varchar(35)    NOT NULL
> );
> GRANT ALL ON requests TO wwwrun, postgres;

Check you server logs and it should tell you why. Actually, check the
error code in your PHP and it should tell you why.

My immediate guess - you haven't granted permission to the sequence for
user "wwwrun".

--
   Richard Huxton
   Archonet Ltd

Re: problem inserting with sequence

От
germ germ
Дата:
This is the error: 2005-07-28 08:51:08 ERROR:
permission denied for sequence requests_req_num_seq

I've tried these grants, but no luck:
GRANT ALL ON FUNCTION nextval(integer) TO wwwrun,
postgres;
GRANT ALL ON FUNCTION nextval('requests_req_num_seq')
TO wwwrun, postgres;
GRANT ALL ON FUNCTION nextval() TO wwwrun, postgres;

--- Michael Fuhr <mike@fuhr.org> wrote:

> On Thu, Jul 28, 2005 at 05:32:03AM -0700, germ germ
> wrote:
> > I have been trying to figure out why I can't
> insert
> > into a table and I think it has something to do
> with
> > the sequnce.
> >
> > I am able to use able to properly insert into the
> > table using the the shell, but I am not able to
> insert
> > using a php script:
> >
> > INSERT INTO requests (time_stamp, req_num,
> > recommended_by) VALUES (now(),
> > nextval('requests_req_num_seq'), 'foo');
>
> What happens when you try the insert?  We need more
> details than
> just "it doesn't work."  If there's an error then it
> should be in
> the postmaster logs, and it should also be available
> to the PHP
> script.
>
> What's different between the situation that works
> and the one that
> doesn't?  Are you connecting as different users?  In
> the code you
> posted I don't see any permissions being granted on
> the sequence,
> so nextval() might be failing with "permission
> denied for sequence";
> another possibility is that the sequence name is
> wrong (see below).
>
> > Here is the schema I'm using:
> > DROP SEQUENCE requests_req_num_seq;
> > DROP TABLE requests;
> >
> > CREATE SEQUENCE requests_req_num_seq INCREMENT BY
> 1
> > START WITH 1000;
> >
> > CREATE TABLE requests (
> >     time_stamp         timestamp    PRIMARY KEY DEFAULT 'now',
>
>
> A timestamp is a poor choice for a primary key
> because it's not
> unique; aside from that you've defined the default
> to be a constant --
> run "\d requests" in psql and you'll see what I
> mean.  See the
> following section of the documentation for more
> info:
>
>
http://www.postgresql.org/docs/7.4/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
>
> >     req_num            integer        DEFAULT
> > nextval('acq_requests_req_num_seq') NOT NULL,
>
> This sequence name doesn't match the name of the
> sequence you created,
> at least not the one you showed.  Is there an
> acq_requests_req_num_seq
> sequence?
>
> --
> Michael Fuhr
> http://www.fuhr.org/~mfuhr/
>




____________________________________________________
Start your day with Yahoo! - make it your home page
http://www.yahoo.com/r/hs


Re: problem inserting with sequence

От
Douglas McNaught
Дата:
germ germ <super_code_monkey@yahoo.com> writes:

> This is the error: 2005-07-28 08:51:08 ERROR:
> permission denied for sequence requests_req_num_seq
>
> I've tried these grants, but no luck:
> GRANT ALL ON FUNCTION nextval(integer) TO wwwrun,
> postgres;
> GRANT ALL ON FUNCTION nextval('requests_req_num_seq')
> TO wwwrun, postgres;
> GRANT ALL ON FUNCTION nextval() TO wwwrun, postgres;

You need to grant permission on the sequence itself.

GRANT ALL ON requests_req_num_seq TO wwwrun;

I think that's tghe right syntax--see the docs...

-Doug

Re: problem inserting with sequence

От
Michael Fuhr
Дата:
On Thu, Jul 28, 2005 at 07:04:54AM -0700, germ germ wrote:
> This is the error: 2005-07-28 08:51:08 ERROR:
> permission denied for sequence requests_req_num_seq
>
> I've tried these grants, but no luck:
> GRANT ALL ON FUNCTION nextval(integer) TO wwwrun,
> postgres;
> GRANT ALL ON FUNCTION nextval('requests_req_num_seq')
> TO wwwrun, postgres;
> GRANT ALL ON FUNCTION nextval() TO wwwrun, postgres;

It's not the nextval() function itself that needs permission, it's
the sequence.  Try this:

GRANT UPDATE, SELECT ON requests_req_num_seq TO wwwrun;

Granting update on a sequence allows the use of nextval() and
setval() on that sequence; granting select allows currval().

http://www.postgresql.org/docs/7.4/static/sql-grant.html

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

Re: problem inserting with sequence

От
Tom Lane
Дата:
germ germ <super_code_monkey@yahoo.com> writes:
> This is the error: 2005-07-28 08:51:08 ERROR:
> permission denied for sequence requests_req_num_seq

> I've tried these grants, but no luck:
> GRANT ALL ON FUNCTION nextval(integer) TO wwwrun,
> postgres;
> GRANT ALL ON FUNCTION nextval('requests_req_num_seq')
> TO wwwrun, postgres;
> GRANT ALL ON FUNCTION nextval() TO wwwrun, postgres;

The missing permission is for the sequence, not the function.

grant all on requests_req_num_seq to ...

            regards, tom lane

Re: problem inserting with sequence

От
germ germ
Дата:
Thank you all for your help. I got it working, once.

Right after I made the change and tested it,
everything worked perfect. Then I had a freak nose
bleed- (This has to be my 3rd nose bleed in my life
ever).  I frantically starting closing windows and
shells. While in my frantic state, I deleted my php
script I had spent about 30+ hours working on.  I
don't back anything up on my test server so it's gone
forever now. My stupidity for not backing up the test
server, so my loss- lesson learned and will not make
again.

....but it did work one time.

thank you again for all the help.

--- Michael Fuhr <mike@fuhr.org> wrote:

> On Thu, Jul 28, 2005 at 07:04:54AM -0700, germ germ
> wrote:
> > This is the error: 2005-07-28 08:51:08 ERROR:
> > permission denied for sequence
> requests_req_num_seq
> >
> > I've tried these grants, but no luck:
> > GRANT ALL ON FUNCTION nextval(integer) TO wwwrun,
> > postgres;
> > GRANT ALL ON FUNCTION
> nextval('requests_req_num_seq')
> > TO wwwrun, postgres;
> > GRANT ALL ON FUNCTION nextval() TO wwwrun,
> postgres;
>
> It's not the nextval() function itself that needs
> permission, it's
> the sequence.  Try this:
>
> GRANT UPDATE, SELECT ON requests_req_num_seq TO
> wwwrun;
>
> Granting update on a sequence allows the use of
> nextval() and
> setval() on that sequence; granting select allows
> currval().
>
>
http://www.postgresql.org/docs/7.4/static/sql-grant.html
>
> --
> Michael Fuhr
> http://www.fuhr.org/~mfuhr/
>

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

Re: problem inserting with sequence

От
Bricklen Anderson
Дата:
germ germ wrote:
> Thank you all for your help. I got it working, once.
>
> Right after I made the change and tested it,
> everything worked perfect. Then I had a freak nose
> bleed- (This has to be my 3rd nose bleed in my life
> ever).  I frantically starting closing windows and
> shells. While in my frantic state, I deleted my php
> script I had spent about 30+ hours working on.  I
> don't back anything up on my test server so it's gone
> forever now. My stupidity for not backing up the test
> server, so my loss- lesson learned and will not make
> again.

Well? Inquiring minds want to know... Did it work?
Did closing windows and shells stop your nosebleed?

:)

--
_______________________________

This e-mail may be privileged and/or confidential, and the sender does
not waive any related rights and obligations. Any distribution, use or
copying of this e-mail or the information it contains by other than an
intended recipient is unauthorized. If you received this e-mail in
error, please advise me (by return e-mail or otherwise) immediately.
_______________________________