1 votos

La estructura WKB no coincide con el tamaño esperado

Estoy ejecutando un flujo de trabajo de Alteryx en el que extraigo datos de una base de datos a otra base de datos PostgreSQL que contiene PostGIS. Sin embargo, cuando ejecuto el flujo de trabajo y escribo los datos en la base de datos, obtengo un error que dice:

Datos de salida (18) DataWrap2ODBC::SendBatch: ERROR: WKB structure does error al ejecutar la consulta Insert into "table_name"("column_1","column_2","column_3","geom") Values (?,?,?,ST_GeomFromWKB(?,4326))

o en otras palabras, el error está diciendo que WKB structure does not match expected size . Hay una geometría o columna de objetos espaciales en la base de datos que estoy tratando de enviar a PostgreSQL ..

Pensé que podría ser el Tamaño del Campo de Objeto Espacial (es demasiado pequeño) pero cuando lo aumenté, no hizo nada. ¿Alguien sabe por qué estoy recibiendo este error y cómo solucionarlo?

EDITAR : Así es como se ve la tabla geom que estoy tratando de insertar en mi tabla PostgreSQL PostGIS:

https://jsfiddle.net/ovr1798k/1/

1voto

BWW Puntos 302

Podemos utilizar la cadena proporcionada. La cadena_original proporcionada está en https://jsfiddle.net/ovr1798k/1/

Podemos procesarla utilizando la cadena original envuelta entre SELECT ST_AsText(ST_GeomFromWKB(E'\\x y )) Lo hemos hecho legible para el ser humano utilizando ST_AsText para comprobar el resultado.

Una demostración completa para insertar sus datos puede ser

CREATE TABLE IF NOT EXISTS table_name(
  column_1 text,
  column_2 text,
  column_3 text,
  geom geometry(Polygon,4326)
);

-- We supposed your srid is 4326 but change it if necessary
-- Change <yourlongwkbstring> with your own wkb string
INSERT INTO table_name(column_1, column_2, column_3, geom)
VALUES ('content1', 'content2', 'content3',
ST_SetSrid(ST_GeomFromEWKB(decode('<yourlongwkbstring>', 'hex')), 4326);

Puede ver un código completo en https://gist.github.com/ThomasG77/dae8e8a76db4fc720fb18d261da4076f (porque es demasiado largo para que quepa aquí la respuesta). Usted tendrá que adaptar nuestra solución, ya que no utiliza marcadores de posición ?

0voto

Richard Hare Puntos 157

Por fin he conseguido que funcione gracias a la ayuda de alguien. Lo que hice al llamar por primera vez a los datos es SELECT column_1, column_2, column_3, ST_AsEWKB(geom) FROM table_name y luego para el Sentencia SQL posterior a la creación en el flujo de trabajo, hice la siguiente sentencia SQL:

ALTER TABLE table_name ALTER COLUMN geom TYPE geometry(geometry,4326) USING (ST_GeomFromEWKB(geom));

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X