Je ne sais pas si son SQL standard:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
Ce que je recherche, c'est: que se passe-t-il si tblA et tblB sont dans des serveurs DB différents .
PostgreSql donne-t-il des utilitaires ou des fonctionnalités qui aideront à utiliser INSERT query with PGresult struct
Je veux dire que je SELECT id, time FROM tblB ...
reviendrai PGresult*
sur l'utilisation PQexec
. Est-il possible d'utiliser cette structure dans une autre PQexec
pour exécuter une commande INSERT.
EDIT:
Si ce n'est pas possible, j'irais pour extraire les valeurs de PQresult * et créer une syntaxe d'instruction INSERT multiple comme:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
Est-il possible de créer une déclaration préparée à partir de cela !! :(
sql
postgresql
insert
dblink
Mayank
la source
la source
Réponses:
Comme Henrik l'a écrit, vous pouvez utiliser dblink pour connecter la base de données distante et récupérer le résultat. Par exemple:
PostgreSQL a un pseudo-type d' enregistrement (uniquement pour l'argument de la fonction ou le type de résultat), qui vous permet d'interroger les données d'une autre table (inconnue).
Éditer:
Vous pouvez en faire une déclaration préparée si vous le souhaitez et cela fonctionne également:
Edit (ouais, un autre):
Je viens de voir votre question révisée (fermée en double ou tout simplement très similaire à celle-ci).
Si ma compréhension est correcte (postgres a tbla et dbtest a tblb et vous voulez une insertion à distance avec une sélection locale , pas une sélection à distance avec une insertion locale comme ci-dessus):
Je n'aime pas ce dblink imbriqué, mais AFAIK je ne peux pas faire référence à tblB dans le corps de dblink_exec . Utilisez LIMIT pour spécifier les 20 premières lignes, mais je pense que vous devez d'abord les trier en utilisant la clause ORDER BY.
la source
INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000;
Puis-je faire une déclaration préparée à partir de cela?Si vous voulez insérer dans la colonne spécifiée:
la source
Vous pouvez utiliser dblink pour créer une vue résolue dans une autre base de données. Cette base de données peut être sur un autre serveur.
la source
INSERT INTO ... (SELECT FROM ...)
fonctionnera avec dblink. Ce dont j'ai besoin estINSERT INTO ...
d'être exécuté en session dblink vers un autre serveur DB, mais(SELECT FROM ...)
dans ma session actuelle.Cette notation (vue pour la première fois ici ) semble également utile:
la source
la source
Voici une solution alternative, sans utiliser
dblink
.Supposons que B représente la base de données source et A représente la base de données cible: Ensuite,
Copier la table du DB source vers le DB cible:
Ouvrez l'invite psql, connectez-vous à target_db et utilisez un simple
insert
:À la fin, supprimez la copie de source_table que vous avez créée dans target_table .
la source