ERROR: row is too big: size 8176, maximum size 8160
Hello,
I am using postgresql-8.3.7 and have recently got this error:
org.postgresql.util.PSQLException: ERROR: row is too big: size 8168,
maximum size 8160
How is that possible in version 8+?
I`ve found some old version 7 manuals that suggest editing
/src/include/config.h file but I did not find one for my sources.
How could I overcome this problem? Do I need to recompile the database?
Do I need to recreate the database already present?
Thank you.
SDA
DimitryASuplatov <genesup@gmail.com> wrote:
Hello,
I am using postgresql-8.3.7 and have recently got this error:
org.postgresql.util.PSQLException: ERROR: row is too big: size 8168,
maximum size 8160
Please show us your table definition.
Wild guess: you have many, many columns, non-text (INT or something
else), and such a row is bigger than 8 KByte, PG can't use TOAST.
I think, you should re-design your table, read about normalisation.
Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082�, E 13.56889�
Andreas Kretschmer wrote:
I am using postgresql-8.3.7 and have recently got this error:
org.postgresql.util.PSQLException: ERROR: row is too big: size 8168,
maximum size 8160Please show us your table definition.
Wild guess: you have many, many columns, non-text (INT or something
else), and such a row is bigger than 8 KByte, PG can't use TOAST.I think, you should re-design your table, read about normalisation.
Or maybe a large column has been modified by
ALTER TABLE ... ALTER COLUMN ... SET STORAGE PLAIN
In any case, if you cannot figure out what causes your row to be
so big, tell us the statements used to create the table and give us
an idea of what you insert (the whole row is probably too much spam).
Yours,
Laurenz Albe
On Fri, Mar 5, 2010 at 12:55 AM, Albe Laurenz <laurenz.albe@wien.gv.at> wrote:
Andreas Kretschmer wrote:
I am using postgresql-8.3.7 and have recently got this error:
org.postgresql.util.PSQLException: ERROR: row is too big: size 8168,
maximum size 8160Please show us your table definition.
Wild guess: you have many, many columns, non-text (INT or something
else), and such a row is bigger than 8 KByte, PG can't use TOAST.I think, you should re-design your table, read about normalisation.
Or maybe a large column has been modified by
ALTER TABLE ... ALTER COLUMN ... SET STORAGE PLAINIn any case, if you cannot figure out what causes your row to be
so big, tell us the statements used to create the table and give us
an idea of what you insert (the whole row is probably too much spam).
I thought even then if the backend can't fit it all in 8k it puts text
out of line.
Scott Marlowe wrote:
I am using postgresql-8.3.7 and have recently got this error:
org.postgresql.util.PSQLException: ERROR: row is too big: size 8168,
maximum size 8160Please show us your table definition.
Wild guess: you have many, many columns, non-text (INT or something
else), and such a row is bigger than 8 KByte, PG can't use TOAST.I think, you should re-design your table, read about normalisation.
Or maybe a large column has been modified by
ALTER TABLE ... ALTER COLUMN ... SET STORAGE PLAINIn any case, if you cannot figure out what causes your row to be
so big, tell us the statements used to create the table and give us
an idea of what you insert (the whole row is probably toomuch spam).
I thought even then if the backend can't fit it all in 8k it puts text
out of line.
test=> CREATE TABLE test (id integer PRIMARY KEY, val text);
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
CREATE TABLE
test=> ALTER TABLE test ALTER val SET STORAGE PLAIN;
ALTER TABLE
test=> INSERT INTO test VALUES (1, '0123456789');
INSERT 0 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
UPDATE 1
test=> UPDATE test SET val = val || val WHERE id = 1;
ERROR: row is too big: size 10272, maximum size 8164
Yours,
Laurenz Albe
Scott Marlowe <scott.marlowe@gmail.com> writes:
On Fri, Mar 5, 2010 at 12:55 AM, Albe Laurenz <laurenz.albe@wien.gv.at> wrote:
Or maybe a large column has been modified by
ALTER TABLE ... ALTER COLUMN ... SET STORAGE PLAIN
I thought even then if the backend can't fit it all in 8k it puts text
out of line.
No, SET STORAGE PLAIN is an absolute override, if I recall the code
correctly. That seems an unlikely explanation though. What I'd bet on
is a very large number of non-toastable columns. A thousand or so
float8's would do it for instance. But this is all speculation without
seeing the table declaration.
regards, tom lane