Обсуждение: BUG #1735: row number -1 is out of range 0..-1 error
The following bug has been logged online:
Bug reference: 1735
Logged by: Borislav Ivanov
Email address: b.ivanov@exsisto.com
PostgreSQL version: 8.0.3
Operating system: Fedora Core
Description: row number -1 is out of range 0..-1 error
Details:
I get this message 'row number -1 is out of range 0..-1' sometimes. I say
sometimes, because this happens unexpected when I submit absolutely correct
query. This is the last time it happened:
I have two tables:
CREATE TABLE billingplans_freetalktime
(
plan_id int4 NOT NULL,
tariff_id int4 NOT NULL,
seconds int4 NOT NULL,
accumulate int2 NOT NULL,
period interval NOT NULL,
description varchar(255),
id serial NOT NULL
)
WITHOUT OIDS;
ALTER TABLE billingplans_freetalktime OWNER TO ser;
CREATE TABLE tariffs
(
id_tariffs_key serial NOT NULL,
id_tariff int4 NOT NULL,
prefix char(20) NOT NULL,
description char(30) NOT NULL,
voice_rate numeric(8,4) NOT NULL,
from_day int2 NOT NULL,
to_day int2 NOT NULL,
from_hour int2,
to_hour int2 NOT NULL,
CONSTRAINT pk_tariffs PRIMARY KEY (id_tariffs_key),
CONSTRAINT fk_tariffs_id_tariff FOREIGN KEY (id_tariff)
REFERENCES tariffsnames (id_tariff) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
WITHOUT OIDS;
ALTER TABLE tariffs OWNER TO ser;
and when i submit this query:
select
billingplans_freetalktime.id, billingplans_freetalktime.seconds,
billingplans_freetalktime.accumulate, billingplans_freetalktime.period
from (billingplans_freetalktime inner join tariffs
on billingplans_freetalktime.tariff_id = tariffs.id_tariff)
where billingplans_freetalktime.plan_id = 5
and '3597' like tariffs.prefix||'%'
order by length(tariffs.prefix) desc;
it returns:
row number -1 is out of range 0..-1
Total query runtime: 151 ms.
Data retrieval runtime: 80 ms.
0 rows retrieved.
although there are these rows in each table:
insert into billingplans_freetalktime
values
(5,41,12,0,'7 days','za proba',3)
insert into tariffs
values
(1, 41, '359', 'descr', 12.3, 0, 6, 0, 23)
"3";"12";"0";"7 days is the result I'm getting in pgadmin. Regards, Andreas
On Tue, Jun 28, 2005 at 07:03:06PM +0200, Andreas Pflug wrote: > > "3";"12";"0";"7 days > > is the result I'm getting in pgadmin. Same here in psql: id | seconds | accumulate | period ----+---------+------------+-------- 3 | 12 | 0 | 7 days (1 row) Borislav, apparently something's different in your environment than what we're testing with. Locale and encoding maybe? Although I don't know if or how that would cause the results you're seeing. -- Michael Fuhr http://www.fuhr.org/~mfuhr/
OK, but check this thing out:
(I did my best to replicate this example on another pgSQL server
running on different platform)
CREATE TABLE billingplans (
id int NOT NULL,
reseller_id integer NOT NULL,
base_tariff_id integer NOT NULL,
discount smallint NOT NULL,
freetalktime smallint NOT NULL,
description character varying(255),
status integer DEFAULT 0 NOT NULL,
created timestamp without time zone
);
INSERT INTO billingplans (id, reseller_id, base_tariff_id, discount,
freetalktime, description, status, created) VALUES (5, 1004, 38, 0, 0, 'rt',
1, '2005-06-20 00:00:00');
INSERT INTO billingplans (id, reseller_id, base_tariff_id, discount,
freetalktime, description, status, created) VALUES (1, 1000, 29, 1, 1, 'test
billing plan', 1, NULL);
INSERT INTO billingplans (id, reseller_id, base_tariff_id, discount,
freetalktime, description, status, created) VALUES (7, 1000, 29, 0, 0,
'base', 1, '2005-06-28 00:00:00');
CREATE TABLE billingplans_lots (
plan_id integer NOT NULL,
lot_id integer NOT NULL
);
INSERT INTO billingplans_lots (plan_id, lot_id) VALUES(1, 11);
CREATE TABLE resellerlots (
lotid int NOT NULL,
resellerid integer NOT NULL,
quantity integer DEFAULT 0 NOT NULL,
total numeric(12,4) DEFAULT 0 NOT NULL,
tariffid integer DEFAULT 1 NOT NULL,
lot_desc character(20) NOT NULL,
creation_date timestamp(6) without time zone NOT NULL,
client_type integer NOT NULL,
status integer DEFAULT 0 NOT NULL
);
INSERT INTO resellerlots (lotid, resellerid, quantity, total, tariffid,
lot_desc, creation_date, client_type, status) VALUES (11, 1000, 0, 0.0000,
38, 'testov za plan ', '2005-06-16 14:02:25.711764', 1, 1);
INSERT INTO resellerlots (lotid, resellerid, quantity, total, tariffid,
lot_desc, creation_date, client_type, status) VALUES (9, 1004, 1, 5.0000,
38, 'testov lot ', '2005-06-14 14:47:08.949854', 1, 1);
Then I submit:
SELECT
billingplans.id AS plan_id,
billingplans.description as plan_name
FROM (billingplans inner join billingplans_lots
on billingplans.id = billingplans_lots.plan_id) inner join resellerlots
on billingplans_lots.lot_id = resellerlots.lotid
WHERE resellerlots.lot_desc = 45678 and resellerlots.resellerid = 1000
and this is what I get:
row number -1 is out of range 0..-1
Total query runtime: 40 ms.
Data retrieval runtime: 30 ms.
0 rows retrieved.
I checked this through psql and:
plan_id | plan_name
---------+-----------
(0 rows)
----- Original Message -----
From: "Michael Fuhr" <mike@fuhr.org>
To: "Andreas Pflug" <pgadmin@pse-consulting.de>
Cc: "Borislav Ivanov" <b.ivanov@exsisto.com>; <pgsql-bugs@postgresql.org>
Sent: Wednesday, June 29, 2005 4:20 PM
Subject: Re: [BUGS] BUG #1735: row number -1 is out of range 0..-1 error
> On Tue, Jun 28, 2005 at 07:03:06PM +0200, Andreas Pflug wrote:
>>
>> "3";"12";"0";"7 days
>>
>> is the result I'm getting in pgadmin.
>
> Same here in psql:
>
> id | seconds | accumulate | period
> ----+---------+------------+--------
> 3 | 12 | 0 | 7 days
> (1 row)
>
> Borislav, apparently something's different in your environment than
> what we're testing with. Locale and encoding maybe? Although I
> don't know if or how that would cause the results you're seeing.
>
> --
> Michael Fuhr
> http://www.fuhr.org/~mfuhr/
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
>
>
> __________ NOD32 1.1157 (20050628) Information __________
>
> This message was checked by NOD32 antivirus system.
> http://www.nod32.com
>
>
On Thu, Jun 30, 2005 at 06:03:09PM +0300, Bobi Ivanov wrote: > > SELECT > billingplans.id AS plan_id, > billingplans.description as plan_name > FROM (billingplans inner join billingplans_lots > on billingplans.id = billingplans_lots.plan_id) inner join resellerlots > on billingplans_lots.lot_id = resellerlots.lotid > WHERE resellerlots.lot_desc = 45678 and resellerlots.resellerid = 1000 > > and this is what I get: > > row number -1 is out of range 0..-1 > Total query runtime: 40 ms. > Data retrieval runtime: 30 ms. > 0 rows retrieved. > > I checked this through psql and: > > plan_id | plan_name > ---------+----------- > (0 rows) I get the same result (zero rows) in psql; that appears to be correct, given the join conditions and the WHERE clause. Maybe Andreas or somebody else can test the query with pgAdmin. -- Michael Fuhr http://www.fuhr.org/~mfuhr/
=20 > -----Original Message----- > From: pgsql-bugs-owner@postgresql.org=20 > [mailto:pgsql-bugs-owner@postgresql.org] On Behalf Of Michael Fuhr > Sent: 01 July 2005 14:35 > To: Bobi Ivanov > Cc: Andreas Pflug; pgsql-bugs@postgresql.org > Subject: Re: [BUGS] BUG #1735: row number -1 is out of range=20 > 0..-1 error >=20 > On Thu, Jun 30, 2005 at 06:03:09PM +0300, Bobi Ivanov wrote: > > > > SELECT > > billingplans.id AS plan_id, > > billingplans.description as plan_name > > FROM (billingplans inner join billingplans_lots > > on billingplans.id =3D billingplans_lots.plan_id) inner join=20 > resellerlots > > on billingplans_lots.lot_id =3D resellerlots.lotid > > WHERE resellerlots.lot_desc =3D 45678 and=20 > resellerlots.resellerid =3D 1000 > >=20 > > and this is what I get: > >=20 > > row number -1 is out of range 0..-1 > > Total query runtime: 40 ms. > > Data retrieval runtime: 30 ms. > > 0 rows retrieved. > >=20 > > I checked this through psql and: > >=20 > > plan_id | plan_name > > ---------+----------- > > (0 rows) >=20 > I get the same result (zero rows) in psql; that appears to be > correct, given the join conditions and the WHERE clause. Maybe > Andreas or somebody else can test the query with pgAdmin. I get 0 rows and no errors with pgAdmin SVN trunk (not that we have changed any of that code recently anyway). Regards, Dave