Thread: Exponential notation bug
I was deleting thousands of records each time with \gexec, then ...
This one works
select format('delete from table where ID = any(%L::integer[]);', array_agg(ID)), (ord-1)/10000 from (
select * from generate_series(15e2,65e5) with ordinality) x(ID, ord) group by 2 order by 2;
select * from generate_series(15e2,65e5) with ordinality) x(ID, ord) group by 2 order by 2;
But it's easier to write in exponential notation, so I changed this (ord-1)/10000 to (ord-1)/1e4. Using this way exponential notation is just ignored.
regards
Marcos
I took a look at simplifying this test case, and I think it comes down to data types: maciek=# select 9/10; ?column? ---------- 0 (1 row) maciek=# select pg_typeof(10); pg_typeof ----------- integer (1 row) But: maciek=# select 9/1e1; ?column? ------------------------ 0.90000000000000000000 (1 row) maciek=# select pg_typeof(1e1); pg_typeof ----------- numeric (1 row) Does that explain the behavior you're seeing?
On Fri, Apr 4, 2025 at 11:55 AM Marcos Pegoraro <marcos@f10.com.br> wrote: > I was deleting thousands of records each time with \gexec, then ... > > This one works > select format('delete from table where ID = any(%L::integer[]);', array_agg(ID)), (ord-1)/10000 from ( > select * from generate_series(15e2,65e5) with ordinality) x(ID, ord) group by 2 order by 2; > > But it's easier to write in exponential notation, so I changed this (ord-1)/10000 to (ord-1)/1e4. Using this way exponentialnotation is just ignored. This seems like a question for -general or some other user-focused mailing list, not hackers. At any rate, I don't see how 1e4 could just be "ignored", but as Maciek points out, 1e4 and 10000 are of different data types, which seems likely to be relevant somehow. -- Robert Haas EDB: http://www.enterprisedb.com
Robert Haas <robertmhaas@gmail.com> writes: > This seems like a question for -general or some other user-focused > mailing list, not hackers. At any rate, I don't see how 1e4 could just > be "ignored", but as Maciek points out, 1e4 and 10000 are of different > data types, which seems likely to be relevant somehow. I am also wondering about careless whitespace. postgres=# select 9/1e1; ?column? ------------------------ 0.90000000000000000000 (1 row) postgres=# select 9/1 e1; e1 ---- 9 (1 row) In any case, I tried copying-and-pasting parts of the originally mentioned query, and I saw nothing that looked like misbehavior. Please show an exact, self-contained test case if you want us to believe there's a bug here. regards, tom lane
Em sex., 4 de abr. de 2025 às 13:13, Maciek Sakrejda <maciek@pganalyze.com> escreveu:
maciek=# select pg_typeof(1e1)
Correct, this explains that
regards
Marcos