Subject Re: [firebird-support] backup on amd64 restore on raspberry pi 3
Author Mark Rotteveel
On 25-8-2018 20:46, pablos@... [firebird-support] wrote:
> Mark, checking on max row size I find :
>
> on https://www.ibphoenix.com/resources/documents/general/doc_323
> "Rows are restricted to 32767 bytes."
>
> on https://www.firebirdsql.org/en/firebird-technical-specifications/
> "Maximum row size     64 KB"
>
> Counting first reference, I'm out of bounds big time ...
>
> CREATE TABLE TABLALOG
> (
>   NID ENTERO NOT NULL,
>   NUSUARIO ENTERO NOT NULL,
>   TSINGRESO T_STAMP,
>   DALCANCE CHAR_255CI,
>   DAPP CHAR_50CI,
>   OEVENTO CLA_SHORT,
>   DIPV4 CHAR_15,
>   DIPV6 CHAR_50,
>   DHOST CHAR_255CI,
>   DENTIDAD CHAR_50CI,
>   OACCION CHAR_50CI,
>   DCONTENIDO VARCHAR(32765),
>   CONSTRAINT PK_TABLALOG PRIMARY KEY (NID)
> );
>
> Where domains are:
> ENTERO integer
> T_TAMP is a timestamp
> CHAR_255CI varchar(255) AI_CI
> CHAR_50 varchar(50) AI_CI
> CHAR_15 varchar(15) AI_CI
> CLA_SHORT short
>
> Database is generated as ISO-8859-1, so using 2 bytes per char, I think
> I'm past all bounds..

You are not, ISO-8859-1 is a single byte character set, so your row is
33526 bytes, which is far below 64kb.

> I recreated the varchar(32765) attribute to varchar(255), backuped an
> restored. The error now shows on another table which has more than 32767
> bytes (another log table, almost identical):
> gbak:    restoring index PK_ERRORLOG
> gbak:restoring data for table ERRORLOG
> gbak: ERROR:message length error (encountered -32512, expected 33024)
> gbak: ERROR:gds_$send failed
> gbak:Exiting before completion due to errors
>
>
> I guess I must use a 32 kbytes max instead of 64kbytes, right?

I'm not sure how and why you made the leap from me telling that this
seems to be a mixup in signed and unsigned integers, from thinking that
this has to do with row sizes. It doesn't.

This would indicate a bug in the gbak on the raspberry pi port. Either
with using wrong integer sizes (16 bit vs 32 bit) or wrong integers
(signed vs unsigned).

Report a bug in the tracker or to the downstream maintainer of the
Raspberry Pi port you're using (as the Firebird project itself doesn't
produce that port AFAIK).

> How two byte per char count here ?
>
> Is the limit for record declaration or actual record size ?
>
> I'm worried that server didn't yelled at me when generating/altering
> database ddl .

If you created a row that was too wide, the server would let you know.

Mark
--
Mark Rotteveel