PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#2 Re : C et C++ » Différences entre PQexec de libpq et l'outil cmd psql.exe ? » 20/04/2022 19:01:47

Merci de votre aide je vais effectivement reprendre sur le source de pg_restore.c

Mais c'est juste cette erreur qui m'étonne... pourquoi cette erreur qui m'est retournée ""ERROR:  function "update_cash_cache" already exists with same argument types" alors qu'elle n'existe pas sur ma nouvelle DB vierge à laquelle je veux restaurer le schéma de ma DB de base? C'est comme si PQexec exécute les requêtes de mon dump sur ma DB de base alors qu'en argument je lui précise la connexion (PGconn) sur ma DB vierge...

#3 Re : C et C++ » Différences entre PQexec de libpq et l'outil cmd psql.exe ? » 20/04/2022 18:20:54

Très bien, y'a-t-il un équivalent de pg_restore dans libpq C++?

#4 Re : C et C++ » Différences entre PQexec de libpq et l'outil cmd psql.exe ? » 20/04/2022 17:45:30

Bonjour,

J'ai effectué le dump directement via PgAdmin3 (qui utilise pg_dump normalement), mais je crois que j'ai compris en fait il n'y a pas de differences en fait entre PQexec et psql dans l'execution de commande SQL si ce n'est que comme je réutilise le meme schema et qu'il existe déjà lors de la création de ma DB de base avec psql toutes les créations d'entités (fonctions, relations etc...) qui existent déjà sont automatiquement abandonnées sans emettre d'erreurs et avec PQexec une erreur est émise comme quoi l'entité existent déjà... Je sais que j'ai peut-être du mal à me faire comprendre alors avec un exemple de mon dump peut-être que ce sera plus clair:

-- Database: "OT DB" 
--
-- PostgreSQL database dump
--

-- Dumped from database version 9.3.25
-- Dumped by pg_dump version 9.3.25

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;

--
-- TOC entry 1 (class 3079 OID 11750)
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: 
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- TOC entry 2954 (class 0 OID 0)
-- Dependencies: 1
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- TOC entry 209 (class 1255 OID 17388)
-- Name: update_cash_cache(); Type: FUNCTION; Schema: public; Owner: %USERNAME%
--

CREATE FUNCTION public.update_cash_cache() RETURNS void
    LANGUAGE plpgsql
    AS $$

...

Au niveau de CREATE FUNCTION public.update_cash_cache() j'ai une erreur avec PQexec (alors que non avec psql): "Error FUNCTION public.update_cash_cache() already exists".
Pour que ça passe je dois à chaque fois faire (pour toutes les entités me donnant cette erreur):

DROP FUNCTION IF EXISTS public.update_cash_cache();
CREATE FUNCTION public.update_cash_cache() RETURNS void
    LANGUAGE plpgsql
    AS $$
...

Et c'est un peu laborieux de le faire, y aurait-il pas un moyen avec PQexec de skipper toutes les requêtes où les entités existent déjà comme le fait psql? Merci.

#5 C et C++ » Différences entre PQexec de libpq et l'outil cmd psql.exe ? » 20/04/2022 15:03:52

Mudr0x
Réponses : 9

Bonjour,

Je suis novice sur Postgres et je voudrais savoir les differences entre PQexec et psql, car j'ai fait un dump du schema de ma DB de base via PgAdmin3 que je veux réutiliser dans mon appli C++ pour recréer mes DBs sur cette base et lorsque je rétablis ce dump via psql ça marche nickel mais via PQexec j'ai tout plein d'erreurs de syntax ou directives inconnues, pourquoi ne sont-ils pas compatibles pour executer les mêmes commandes SQL? Je voudrais absolument pouvoir rétablir mon dump via PQexec et non psql car ça ne me plait pas de passer le dump via une commande de script etc... et en plus c'est une usine à gaz voir presque impossible de gérer les exceptions et erreurs via psql.
Alors y aurait-il un moyen de rendre mon dump compatible avec PQexec? Merci d'avance pour votre aide.

Pied de page des forums

Propulsé par FluxBB