J'utilise la bibliothèque libpq en C pour accéder à ma base de données PostgreSQL. Donc, quand je fais res = PQexec (conn, "SELECT point FROM test_point3d"); Je ne sais pas comment convertir le PGresult que j'ai obtenu à mon type de données personnalisé. Je sais que je peux utiliser la fonction PQgetValue, mais encore une fois, je ne sais pas comment convertir la chaîne de retour en mon type de données personnalisé.Comment convertir un PGresult en type de données personnalisé avec libpq (PostgreSQL)
Répondre
La meilleure façon de penser à cela est que les types de données interagissent avec les applications sur une interface textuelle. Libpq renvoie une chaîne à partir de n'importe quoi. Le programmeur a la responsabilité d'analyser la chaîne et de créer un type de données à partir de celle-ci. Je sais que l'auteur a probablement abandonné la question, mais je travaille sur quelque chose de similaire et il vaut la peine de documenter quelques astuces importantes qui sont utiles dans certains cas.
De toute évidence, s'il s'agit d'un langage de type C, avec sa propre représentation d'entrée et de sortie, vous devrez alors analyser la chaîne comme vous le feriez normalement.
Toutefois, pour les tableaux et les tuples, la notation est essentiellement
[open_type_identifier][csv_string][close_type_identifier]
Par exemple, un tuple peut être représenté comme:
(35,65,1111111,f,f,2011-10-06,"2011-10-07 13:11:24.324195",186,chris,f,,,,f)
Cela rend plus facile à analyser. Vous pouvez généralement utiliser les processeurs csv existants une fois que vous avez décoché le premier et le dernier caractère. De plus, pensez à:
select row('test', 'testing, inc', array['test', 'testing, inc']);
row
-------------------------------------------------
(test,"testing, inc","{test,""testing, inc""}")
(1 row)
Comme cela montre que vous avez CSV la norme s'échappant à l'intérieur des attributs imbriqués, de sorte que vous pouvez, en effet, déterminer que le troisième attribut est un tableau, puis (après avoir undoubled les guillemets), l'analyser comme un tableau. De cette façon, les structures de données imbriquées peuvent être traitées d'une manière à peu près similaire à ce que vous pourriez attendre avec un format comme JSON. L'astuce est que c'est un CSV imbriqué.
le '(' et ')' sont utilisés dans les données personnalisées types aussi, mais pas pour les types natifs – user3791372
- 1. PostgreSQL: horodatage SQL à l'horodatage Unix en utilisant libpq
- 2. STL avec un type de données personnalisé
- 3. Connexion de l'application iPhone à PostgreSQL Utilisation de Libpq
- 4. postgresql libpq insertion d'une ligne vide sans raison
- 5. libpq envoie un entier en binaire
- 6. Colonne DataTable avec type de données personnalisé
- 7. Comment convertir un type de chaîne en type personnalisé défini par l'utilisateur
- 8. Problème g ++ avec l'option -l et PostgreSQL
- 9. Type de données personnalisé en Java
- 10. Comment trier par compte personnalisé avec postgresql?
- 11. Comment convertir un type de colonne de varchar à date dans PostgreSQL?
- 12. Comment mapper (NHibernate) un type PostgreSql spécifié?
- 13. PostgreSQL: Convertir deux valeurs numériques séparées en un point
- 14. Comment convertir un type en générique?
- 15. comment faire subonic convertir une chaîne à mon personnalisé Type
- 16. Comment convertir un objet en type décrit par Type classe?
- 17. Convertir MySQL ++ en PostgreSQL à l'exécution
- 18. Comment convertir un type anynoymous?
- 19. Comment convertir un objet Flex en un type dérivé?
- 20. parsec-3.1.0 avec le type de données de jeton personnalisé
- 21. Type de données UID personnalisé pour CoreData
- 22. DynamicData: utiliser un type personnalisé comme type de retour
- 23. En SQL comment puis-je convertir un type de données monétaire en nombre décimal?
- 24. .NET - Utilisation d'un type personnalisé dans un ensemble de données
- 25. convertir une chaîne dans un type de données de temps
- 26. Comment convertir une colonne de table en un autre type de données
- 27. C# - convertir un type anonyme en observablecollection
- 28. Comment convertir un .net type de collection en collection VBA?
- 29. Convertir le temps en secondes dans PostgreSQL
- 30. Cast type de données défini par l'utilisateur dans PostgreSQL
Quel est votre type de données personnalisé? –
Quelque chose comme ceci: typedef struct Point3D { \t char id [50]; \t int idnull; \t double x; \t double y; \t double z; \t } \t Point3D; Je pense que je dois analyser la chaîne de retour de PQgetValue. Je travaille sur ceci donc si cela fonctionne je l'afficherai ici. : D – mocopera
Presque tout est renvoyé sous forme de chaîne. Les [tableaux] de Postgres (http://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-IO) sont un bon exemple pour quelque chose qui est retourné sous forme de chaîne et qui doit être analysé par l'application pour être utile . En fonction de "test_point3d.point" et de la manière dont il est représenté en tant que/convert to string par Postgres, vous devrez analyser cette chaîne et la convertir en votre type de données. –