Я не уверен, что его стандартный SQL:
INSERT INTO tblA
(SELECT id, time
FROM tblB
WHERE time > 1000)
Я ищу: что, если tblA и tblB находятся на разных серверах БД .
Предоставляет ли PostgreSql какие-либо утилиты или имеет какие-либо функции, которые помогут использовать INSERT query with PGresult struct
Я имею ввиду SELECT id, time FROM tblB ...
вернусь при PGresult*
использовании PQexec
. Можно ли использовать эту структуру в другой PQexec
для выполнения команды INSERT.
РЕДАКТИРОВАТЬ:
Если это невозможно, я бы пошел на извлечение значений из PQresult * и создал синтаксис нескольких операторов INSERT, например:
INSERT INTO films (code, title, did, date_prod, kind) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
Можно ли из этого составить заранее подготовленное заявление !! :(
sql
postgresql
insert
dblink
Mayank
источник
источник
Ответы:
Как писал Хенрик, вы можете использовать dblink для подключения к удаленной базе данных и получения результата. Например:
PostgreSQL имеет псевдотип записи (только для аргумента функции или типа результата), который позволяет вам запрашивать данные из другой (неизвестной) таблицы.
Редактировать:
Вы можете сделать это как подготовленный оператор, если хотите, и он тоже работает:
Изменить (да, еще один):
Я только что увидел ваш измененный вопрос (закрыт как дубликат или очень похож на этот).
Если я правильно понимаю (postgres имеет tbla, а dbtest имеет tblb, и вам нужна удаленная вставка с локальным выбором , а не удаленный выбор с локальной вставкой, как указано выше):
Мне не нравится этот вложенный dblink, но, AFAIK, я не могу ссылаться на tblB в теле dblink_exec . Используйте LIMIT, чтобы указать первые 20 строк, но я думаю, вам нужно сначала отсортировать их, используя предложение ORDER BY.
источник
INSERT INTO tblA SELECT id, time FROM dblink('dbname=dbtest', 'SELECT id, time FROM tblB') AS t(id integer, time integer) WHERE time > 1000;
Могу ли я сделать из этого заранее подготовленное заявление?Если вы хотите вставить в указанный столбец:
источник
Вы можете использовать dblink для создания представления, которое разрешено в другой базе данных. Эта база данных может находиться на другом сервере.
источник
INSERT INTO ... (SELECT FROM ...)
будет работать с dblink. Мне нужноINSERT INTO ...
запустить сеанс dblink на другой сервер БД, но(SELECT FROM ...)
в моем текущем сеансе.Эта запись (впервые увиденная здесь ) тоже выглядит полезной:
источник
источник
Вот альтернативное решение без использования
dblink
.Предположим, что B представляет исходную базу данных, а A представляет целевую базу данных: Затем,
Скопируйте таблицу из исходной БД в целевую:
Откройте приглашение psql, подключитесь к target_db и используйте простую команду
insert
:В конце удалите копию source_table, которую вы создали в target_table .
источник