Tuesday 13 December 2016

Pqexecparams Binary Options

PostgreSQL (a través de C Npgsql) devuelve la columna de geometría (PostGIS) como una cadena hexadecimal (EWKB según entiendo) para esta consulta: Resultado (por ejemplo): ¿Es posible obtenerlo como blob / byte array o PostGIS storeem siempre como texto Su no una buena para el funcionamiento, porque usted necesita convertir la cadena del hex en una matriz del byte antes de leer. PD. Sé sobre STAsText, pero no quiero analizar WKT, actualmente leo de EWKB sin ningún problema. Chicos, lo siento por mi inglés primitivo. Hay dos cosas que suceden aquí. Pg utiliza las funciones de E / S de texto para los tipos de datos de forma predeterminada, e incluso si solicita explícitamente bytea. El protocolo predeterminado todavía intercambia bytea como texto utilizando el modo byteaoutput. Los clientes de PostgreSQL utilizan el protocolo de modo de texto de forma predeterminada cuando se habla con PostgreSQL. Cuando SELECCIONA una columna de geometría, PostgreSQL utiliza la función de salida de modo de texto para el tipo, que es geometryout. En PostGIS, este formato de los datos como hexadecimal para la salida, porque el protocolo de texto no puede transmitir binarios arbitrarios por lo que no puede enviar el formato en bruto en el disco directamente. Si utiliza funciones como STAsBinary que devuelven bytea. Todavía obtiene salida hexadecimal cuando utiliza el protocolo predeterminado. Su formato como un literal de bytea PostgreSQL como su convertido a través de la configuración byteaoutput en texto para enviar al cliente, pero su aún textual. Esto se debe a que el protocolo de texto PostgreSQL no puede transportar datos binarios arbitrarios sin que esté codificado, por lo que el servidor lo convierte después de que la función PostGIS devuelve binario. Muchos controladores de cliente lo convierten automáticamente en binario en el lado del cliente, por lo que es posible que no note o se preocupe por esta traducción de texto, pero puede ser un problema de rendimiento para aplicaciones de volumen muy alto, por lo que PostgreSQL admite un modo de protocolo binario. Si habilita el protocolo binario de PostgreSQL en su cliente, suceden dos cosas: PostgreSQL utiliza geometrysend en lugar de geometryout cuando SELECCIONA una columna de geometría. Esto envía la geometría como bytea y PostgreSQL envía campos bytea directamente como longitud de bytes al cliente en el protocolo binario en lugar de convertirlos a través de byteaoutput. Así que lo que necesita hacer es habilitar el protocolo binario de PostgreSQL en su cliente. Con libpq youd utilice PQexecParams con el conjunto resultFormat. No pude encontrar ninguna evidencia de que nPgSQL soporta el protocolo binario en absoluto, por desgracia. Es un controlador completamente independiente, no basado en libpq. Por lo que no soporta todas las características de servidor y protocolo. Si pones el cliente en modo de protocolo binario, no necesitas usar STAsBinary o STAsEWKB. Como geometrysend entregará binario de todos modos. Si no está usando el protocolo binario theres ninguna manera de transferir un-codificado binario, porque el protocolo de modo de texto simplemente no lo soporta. Bajo todas las circunstancias, los datos de geometría se almacenan todavía en una forma binaria compacta en disco. Necesitará utilizar STAsBinary o STAsEWKB. Como dije al principio no hay manera de cambiar el formulario de E / S predeterminado. Una extensión PostGIS-aware para nPgSQL probablemente podría hacer esto transparente para el usuario, así que no tenías que preocuparte, pero no tengo conocimiento de ninguna extensión. (Editado para agregar más detalles). Ndash Craig Ringer May 11 14 at 13: 44PostgreSQL libpq (C) - Insertar datos binarios 2010/09/30 Creaciones GOO ltgoocreationsgmailgt: Hola, I39m sentado durante días, y no puedo conseguir esto funcione: Quiero insertar datos binarios (Bytea) en mi base de datos postgres a través de la libpq c. Lo que tengo es un char (en realidad un QByteArray) y quiero insertarlo en el DB y recuperarlo de allí de nuevo. No puedo encontrar buenos ejemplos o tutoriales en línea, así que cualquiera puede ayudarme (o dirigir directamente a un tutorial) sobre cómo insertar datos binarios y recuperarlos de nuevo. Muchas gracias Christoph - Vincenzo Romano en NotOrAnd Tecnologías de la Información Software Hardware Networking Training Soporte de Seguridad - NON QVIETIS MARIBVS NAVTA PERITVS Vincenzo Romano Lo siento, me refería a 30.3.5 en v8: postgresql. org/docs/8.4/static/libpq-exec. htmlLIBPQ-EXEC-ESCAPE-BYTEA Parece que no hay tal cosa En v9, sin embargo - Vincenzo Romano en NotOrAnd Tecnologías de la Información Software Hardware Redes Formación Soporte Seguridad - NON QVIETIS MARIBVS NAVTA PERITVS 2010/9/30 Vincenzo Romano ltvincenzo. romanonotorand. itgt: 2010/9/30 Creaciones GOO ltgoocreationsgmailgt: I39m sentado para Días, y no puedo conseguir que esto funcione: Quiero insertar datos binarios (bytea) en mi base de datos postgres a través de la libpq c. Lo que tengo es un char (en realidad un QByteArray) y quiero insertarlo en el DB y recuperarlo de allí de nuevo. No puedo encontrar buenos ejemplos o tutoriales en línea, así que cualquiera puede ayudarme (o dirigir directamente a un tutorial) sobre cómo insertar datos binarios y recuperarlo de nuevo Muchas gracias Christoph Parece que no hay tal cosa en v9, aunque - Vincenzo Romano en NotOrAnd Tecnologías de la Información Software Hardware Networking Formación Soporte Seguridad - NON QVIETIS MARIBVES NAVTA PERITVS GOO Creaciones I39ve trabajado a través de que ya, sin ningún éxito. Esto es lo que tengo hasta ahora para insertar datos char query quotinsert en table1 (bytes) valores (361) quot QByteArray chip const char datos chip-gtdata () const char parámetros const int paramslength const int paramsformat resultado PQexecParams (mDatabase, consulta, 1 , Inoide, params, paramslength, paramsformat, 0) El primer problema que tengo es que I39m no estoy seguro si const int paramslength I39ve trabajado a través de que ya, sin ningún éxito. Esto es lo que tengo hasta ahora para insertar datos char consulta quotinsert en table1 (bytes) valores (361) quot QByteArray chip ltassignment de bytesgt const char datos chip-gtdata () const char parámetros const int paramslength const int paramsformat resultado PQexecParams (mDatabase, El primer problema que tengo es que I39m no estoy seguro de si const int paramslength es la forma correcta de proporcionar la longitud. En segundo lugar, ¿es esto realmente la manera correcta de hacerlo, no hay una manera mejor? El 2010/09/30 05:30 PM, Vincenzo Romano escribió: 2010/9/30 GOO Creationsltgoocreationsgmailgt: I39m sentado por días ahora, y yo Can39t conseguir que esto funcione: Quiero insertar datos binarios (bytea) en mi base de datos postgres a través de la libpq c. Lo que tengo es un char (en realidad un QByteArray) y quiero insertarlo en el DB y recuperarlo de allí de nuevo. No puedo encontrar buenos ejemplos o tutoriales en línea, así que cualquiera puede ayudarme (o dirigir a un tutorial) sobre cómo insertar datos binarios y recuperarlos de nuevo. Muchas gracias Christoph El 30 de septiembre de 2010, a las 8:26 AM, GOO Creations escribió: I39m sentado durante días, y no puedo conseguir esto para trabajar: Quiero insertar datos binarios (bytea) en mi base de datos postgres a través de la libpq c. Lo que tengo es un char (en realidad un QByteArray) y quiero insertarlo en el DB y recuperarlo de allí de nuevo. No puedo encontrar buenos ejemplos o tutoriales en línea, así que cualquiera puede ayudarme (o dirigir a conocer a un tutorial) sobre cómo insertar datos binarios y recuperarlo de nuevo ¿Hay alguna razón you39re no utilizar la base de datos Qt API It39ll mapa en lo que you39re haciendo Mucho más fácilmente que usar libpq. (También, libpq isn39t una API C, así que tal vez you39re pensando en otra cosa, como libpqxx) GOO Creaciones Sí, hay una razón I39m no utilizar bibliotecas Qt39s. Qt doesn39t salir con PSQL como controlador predeterminado (lo que significa que tiene que descargar manualmente el controlador para Qt postgres). I39m desarrollando un plugin para una aplicación que restringe Qt, no se permiten depedncies adicionales. Pero la aplicación tiene libpq como dependency, así que puedo usar eso. Chris Sí, hay una razón por la cual no uso las bibliotecas Qt39s. Qt doesn39t salir con PSQL como controlador predeterminado (lo que significa que tiene que descargar manualmente el controlador para Qt postgres). I39m desarrollando un plugin para una aplicación que restringe Qt, no se permiten depedncies adicionales. Pero la aplicación tiene libpq como dependency, así que puedo usar eso. El 2010/09/30 05:38 PM, Steve Atkins escribió: El 30 de septiembre de 2010, a las 8:26 AM, GOO Creations escribió: I39m sentado durante días, y no puedo conseguir esto para trabajar: Quiero insertar binario Datos (bytea) en mi base de datos postgres a través de la libpq c. Lo que tengo es un char (en realidad un QByteArray) y quiero insertarlo en el DB y recuperarlo de allí de nuevo. No puedo encontrar buenos ejemplos o tutoriales en línea, así que cualquiera puede ayudarme (o dirigir a conocer a un tutorial) sobre cómo insertar datos binarios y recuperarlo de nuevo ¿Hay alguna razón you39re no utilizar la base de datos Qt API It39ll mapa en lo que you39re haciendo Mucho más fácilmente que usar libpq. (También, libpq isn39t una API C, por lo que tal vez you39re pensando en otra cosa, como libpqxx) Thu, 30 de septiembre 2010 a las 11:42, GOO Creations escribió: Sí, hay una razón I39m no utilizar bibliotecas Qt39s. Qt doesn39t salir con PSQL como controlador predeterminado (lo que significa que tiene que descargar manualmente el controlador para Qt postgres). I39m desarrollando un plugin para una aplicación que restringe Qt, no se permiten depedncies adicionales. Pero la aplicación tiene libpq como dependency, así que puedo usar eso. Aquí está mi respuesta de la anterior vez que respondí a la pregunta. Hay un número de maneras de ocuparse de esto (mi favorito lejos es libpqtypes, pero I39m absolutamente parcial): El miércoles, 21 de julio de 2010 en 9:27 AM, Merlin Moncure escribió: El lun, 19 de julio de 2010 en 8: 14 PM, viniciusbra escribió: I39m el desarrollo de un sistema en C y tengo un unsigned char pointer que representa una estructura y me gusta almacenar en una columna bytea en postgreSQL. ¿Cómo puedo hacerlo? Ejemplo: tiene varias opciones:) codificar la memoria para la estructura PQescapeStringConn y enviar a PQexec (mi método menos favorito)) establecer una llamada a PQexecParams (más trabajo, pero más rápido y no escapar)) hacer una Tipo compuesto en el servidor y enviar su estructura de una manera más clásica de SQL) utilizar libpqtypes (este es el trabajo más establecido, pero lo mejor a largo plazo) :-) w / libpqtypes: PGbytea b PGresult res PQexecf (conn, Quotinsert en valores t (bytea) quot, b) PQclear (res) gracias por esta punta, pero por lo que yo entiendo libpqtypes no es parte de la libqa lipq original. Esto resultará en el mismo problema que con las bibliotecas Qt, se agregará otro dependecy a mi plugin, que no está permitido. El 2010/09/30 10:59 PM, Merlin Moncure escribió: El jue, 30 de septiembre 2010 a las 11:42, GOO Creationswrote: Sí, hay una razón I39m no usar bibliotecas Qt39s. Qt doesn39t salir con PSQL como controlador predeterminado (lo que significa que tiene que descargar manualmente el controlador para Qt postgres). I39m desarrollando un plugin para una aplicación que restringe Qt, no se permiten depedncies adicionales. Pero la aplicación tiene libpq como dependency, así que puedo usar eso. Aquí está mi respuesta de la anterior vez que respondí a la pregunta. Hay una serie de maneras de lidiar con esto (mi favorito de lejos es libpqtypes, pero I39m muy sesgada): El miércoles, 21 de julio 2010 a las 9:27, Merlin Moncure escribió: El lun, 19 de julio 2010 a las 8:14 PM, viniciusbrawrote: I39m desarrollando un sistema en C y tengo un fichero unsigned char que representa una estructura y me gusta almacenarla en una columna bytea en postgreSQL. ¿Cómo puedo hacerlo? Ejemplo: tiene varias opciones:) codificar la memoria para la estructura PQescapeStringConn y enviar a PQexec (mi método menos favorito)) configurar una llamada a PQexecParams (más trabajo, pero más rápido y no escapar)) hacer una Tipo compuesto en el servidor y enviar su estructura de una manera más clásica de SQL) utilizar libpqtypes (este es el trabajo más establecido, pero lo mejor a largo plazo) :-) w / libpqtypes: PGbytea b PGresult res PQexecf (conn, Quotinsert en valores t (bytea) quot, b) PQclear (res) El Vie, Oct 1, 2010 a las 3:08 AM, John R Pierce escribió: El 30/09/10 11:58, GOO Creations escribió: thanks for Este consejo, pero por lo que yo entiendo libpqtypes no es parte de la librería lipq original. Esto resultará en el mismo problema que con las bibliotecas Qt, se agregará otro dependecy a mi plugin, que no está permitido. Tomar la fuente a libpqtypes, y enlace estático con su plugin. Sí - usted tendría que habilitar que a través de configurar. Tirando en libptypes sólo para pasar bytea es probablemente excesivo aunque teniendo en cuenta que se puede hacer en stock libpq w / o demasiado esfuerzo. Para justificarlo, usted querría aprovechar algunas de las otras características de la biblioteca (especialmente, el array / composite passing, para el cual no hay un método razonable vía libpq).hi He instalado bandiwidthd-2.0.1 en fedora core 2. Funciona bien cuando está solo. Pero cuando intento utilizar el soporte de databse después de configurar todos los archivos correctamente, bandwidthd comienza bien pero no puede poner ningún dato en la base de datos. En el archivo / var / log / messages, Siguiente mensaje: wifi-india bandwidthd: El registro de Postgresql seleccionado pero el soporte postgresql no se compila en binario. Consulte la documentación en README, distribuida con este software. Aquí está mi archivo bandwidthd. conf. Bandwidthd. conf Las opciones comentadas están aquí para proporcionar documentación y representar las subredes por defecto para recopilar estadísticas. El tráfico que no coincida con ninguna de estas subredes será ignorado. La sintaxis es IP Subnet Mask o CIDR subred 10.255.32.0/24 subred 192.168.0.0/16 subred 172.16.0.0/12 Dispositivo para escuchar en Bandwidthd escucha en el primer dispositivo que detecta de forma predeterminada. Ejecute bandwidthd - l para obtener una lista de dispositivos. Dev eth1 Un intervalo es de 2,5 minutos, este es el número de intervalos a saltar antes de hacer una gráfica de ejecución skipintervals 0 gráfico de corte es cuántos k debe ser transferido por un ip antes de molestarnos en graficar graphcutoff 1024 Poner la interfaz en modo promiscuo para puntuación a El tráfico que no puede ser el enrutamiento a través de la máquina host. Promiscuous true Datos de registro en el archivo cdf htdocs / log. cdf outputcdf false Leer el archivo cdf al inicio recovercdf false Libpcap filtro de formato cadena de filtro utilizado para controlar lo que ancho de banda ve Por favor, siempre incluya ip en la cadena para evitar problemas extraños filtro ip Draw Graphs - This Por defecto a true para graficar el ancho de banda de tráfico está grabando Normalmente, establezca esto en false si sólo desea la salida cdf o está utilizando la opción de salida de la base de datos. Bandwidthd utilizará muy poco ram y cpu si se establece en false. Graph false Establecer META REFRESH segundos (por defecto 150, use 0 para deshabilitar). Metarefresh 150 pgsqlconnectstring usuario raíz dbname ancho de banda host localhost dime cuál podría ser el problem. is hay algún problema con el binario instalado o el databse. Si desea referirse a este comentario en algún otro sitio de este proyecto, copie y pegue el siguiente enlace: Tengo problemas con el ancho de banda, diciéndome que el soporte postgresql no está compilado en el binario también. Estoy utilizando CentOS 5, e instalado postgres cosas con yum, pero cuando me di cuenta de que bandwidthd configurar no estaba viendo, también manualmente configurado e instalado una versión idéntica de postgresql en / usr / local para solucionar ese problema. (Primero intenté cambiar manualmente el script de configuración, pero la primera forma parecía más completa). También intenté corregir el Makefire como James sugirió, pero todavía consigo que el error sobre la ayuda de postgresql no esté siendo compilado adentro. Im no sure qué Im que falta. Pero creo que hay una pista en mi config. log, que se pega parte de al final de este mensaje. Estoy interesado si hay otras ideas en cuanto a lo que podría estar pasando aquí. El script de configuración todavía falta algo necesario para el soporte postgresql configure: 2893: buscando gdImageCreate en - lgd configure: 2920: gcc - o conftest - g - O2 - I / usr / local / include - L / usr / local / lib conftest 292: config: 2929: config: 2929: config: 2940: resultado: sí configure: 2955: comprueba si pcapopenlive en - lpcap configure: 2982: gcc - o conftest - g - O2 - I / usr / local / include - L / usr / local / lib conftest. c - lpcap - lgd - lpng - lm - lresolv - lnsl gtamp5 configure: 2985: 0 configure: 2988 : Test: config: 3009: config: 3002: resultado: sí configure: 3078: búsqueda de / usr / local / pgsql / lib configure: 3093: resultado: sí configure: 3099: búsqueda de / usr / local / pgsql / Include configurar: 3114: resultado: sí configurar: 3120: buscar PQconnectdb en - lpq configurar: 3147: gcc - o conftest - g - O2 - I / usr / local / include - I / usr / local / pgsql / include - 3153: test - s conftest configure: 3150: 0 configure: 3153: l / usr / local / lib - L / usr / local / pgsql / lib conftest. c - lpq - lpcap - lgd - lpng - lm - lresolv - lnsl gtamp5: 3156: 0 configurar: 3167: resultado: sí configurar: 3171: buscar PQexecParams en - lpq configurar: 3198: gcc - o conftest - g - O2 - I / usr / local / include - I / usr / local / pgsql / include - L / usr / local / lib - L / usr / local / pgsql / lib conftest. c - lpq - lpcap - lgd - lpng - lm - lresolv - lnsl gtamp5 configure: 3201: 0 configure: 3204: test - s conftest configure : 3207: 0 configure: 3218: resultado: sí configure: 3239: comprobación de dirent. h que define DIR configure: 3259: gcc - c - g - O2 - I / usr / local / include - I / usr / local / pgsql : Include: config: 3262: config: 3265: test: config: 3268: config: 3278: resultado: yes configure: 3291: comprueba si hay opendir en - ldir configure: 3318: gcc - o Conftest - g - O2 - I / usr / local / include - I / usr / local / pgsql / include - L / usr / local / lib - L / usr / local / pgsql / lib conftest. c - ldir - lpq - lpcap - lgd - lpng - lm - lresolv - lnsl gtamp5 / usr / bin / ld: no puede encontrar - ldir collect2: ld devuelto 1 exit status configure: 3321: 1 configure: falló el programa fue: line 3299 configure include confdefs. h / Gcc2 prototipo interno para evitar un error. / Ifdef cplusplus extern C endif / Utilizamos char porque int puede coincidir con el tipo de retorno de una consola gcc2 y entonces su prototipo de argumento seguiría siendo válido. / Char opendir () int main () opendir () return 0 configurar: 3338: resultado: no configurar: 3403: buscar gd. h configurar: 3413: gcc - E - I / usr / local / include - I / usr / Local / pgsql / include conftest. c configurar: 3419: 0 configurar: 3438: resultado: sí configurar: 3505: buscar gdfonts. h configurar: 3515: gcc - E - I / usr / local / include - I / usr / local / Pgsql / include conftest. c Si desea referirse a este comentario en algún otro sitio de este proyecto, copie y pegue el siguiente enlace: He podido solucionar mi problema al eliminar algunas líneas de código - No sé mucho sobre C, Por lo que no puedo decir lo que los efectos de esto podría ser en el camino, pero en esencia esto debería haber forzado el soporte postgresql para ser compilado en el binario: Quitar las líneas: 624 ifdef HAVELIBPQ y 869else 870 syslog (LOGERR, registro de Postgresql seleccionado pero El soporte de postgresql no se compila en binario. Por favor, consulte la documentación en README, distribuido con este software.) 871endif Y ahora las cosas parecen un poco más felices Si desea hacer referencia a este comentario en otro lugar en este proyecto, copie y pegue el Siguiente enlace: Hola, tuve el mismo problema con la base de datos que también estaba recibiendo el error: registro de Postgresql seleccionado, pero el soporte postgresql no se compila en binario, después de una gran cantidad de búsqueda en el archivo de instalación bandwidthd. c cambio las líneas que dice: Ifdef HAVELIBPQ incluye ltlibpq-fe. hgt endif // ifdef HAVELIBPQ incluye lt / usr / include / pgsql / libpq-fe. hgt // donde mi libpq-fe. h está en mi sistema operativo, he instalado en SuSE 11.0 // endif After Que funcionó para mí. Si desea referirse a este comentario en algún otro sitio de este proyecto, copie y pegue el siguiente enlace: Gracias a este foro, finalmente tengo el registro de Bandwidthd en mi servidor PostgreSQL. Tenía problemas similares, / var / log / messages contenía lo siguiente: el registro de Postgresql seleccionado pero el soporte de postgresql no se compilaba en binario. Consulte la documentación en README, distribuida con este software. Tenía el cliente Postgres-9.1 instalado, pero faltaba el archivo de cabecera libpq-fe. h que me dieron de la instalación de postgresql-devel-9.1.rpm usando Yum yum instalar postgresql-devel-9.1 Luego seguí el consejo anterior cambiando bandwidthd. c, pero no comento el ifdef / endif de la siguiente manera: ifdef HAVELIBPQ include lt / usr / pgsql-9.1 / include / libpq-fe. hgt // CentOS 5.6 ubicación específica endif recompilé el ancho de banda pero aún así tuve el mismo problema . Al ejecutar ./configure me di cuenta de que las dos pruebas de PostgreSQL fallaron: buscar / usr / local / pgsql / lib no buscar / usr / local / pgsql / include No Estas carpetas no así que creé enlaces simbólicos a donde estas carpetas en realidad Estaban en mi sistema CentOS 5.6: ln - s /usr/pgsql-9.1/include / usr / local / pgsql / include ln - s /usr/pgsql-9.1/lib / usr / local / pgsql / lib He recompilado bandwidthd y. / Configure pasó esas dos pruebas: buscar / usr / local / pgsql / lib sí buscar / usr / local / pgsql / include Sí corrí ancho de banda y después de un par de minutos empezó a registrarme en mi servidor remoto de base de datos Postgres. El phphtdocs por defecto configurado puede permitir que su archivo config. conf que contiene los datos de la base de datos para ser servido por su servidor web por lo que agregó la siguiente directiva a mi Apache httpd. conf para evitar que sirva cualquier archivo. conf y reinició Apache:.confgt Orden Permitir, negar Negar de todos lt / Filesgt Ahora bandwidthd está funcionando muy bien. Si desea referirse a este comentario en algún otro sitio de este proyecto, copie y pegue el siguiente enlace:


No comments:

Post a Comment