Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/142: Рейтинг темы: голосов - 142, средняя оценка - 4.62
9 / 9 / 6
Регистрация: 02.02.2010
Сообщений: 35

Копирование структуры из одной БД в другую

12.10.2017, 18:44. Показов 29145. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ув. Форумчане нужна ваша помощь
В общем я толком не имел раньше дел в базами данных, так делал простые запросы и передавал данные на сайт и на сайте их выводил в таблички. На этом вся работа с БД у меня заканчивалась. Но тут меня на работе решили развивать и дали задание. PostgreSQL впервые увидел позавчера, качнул мануал на русском на две тысячи страниц.
В общем подскажите хоть куда копать. Суть задания:
Есть две базы на разных серверах.
Первая база пустая. Я в нее хочу скопировать структуру второй базы в которой уже много таблиц, но без данных из этих таблиц. То есть я хочу получить в первой пустой базе список таблиц с полями, которые есть в второй.

Например:
В второй базе есть таблица users (id, 'login', 'email', 'password')
я хочу чтобы эта таблица появилась в первой базе, но без данных.

И второй вопрос.
Если у меня есть две базы, в одной пустая таблица, а в другой заполненная данными. Как мне перенести данные? я попробовал при помощи SELECT * FROM dblink(....) AS tab (col1 ....); получил в консоль таблицу, но как мне ее сохранить? INSERT INTO users SELECT * FROM dblink(....) AS tab (col1 ....); приводит к ошибке ERROR: column "created_date" is of type timestamp without time zone but expression is of type numeric и подсказке You will need to rewrite or cast the expression. Хотя поля в обоих таблицах timestamp without time zone.

Уповаю на помощь форумчан
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2017, 18:44
Ответы с готовыми решениями:

Копирование одной структуры в другую
Привет. Есть класс class ArrayOfPatient { public: int __sizeitem; Patient **item; } и вектор QVector<Patient*>...

Копирование одной структуры с данными в другую
Надо скопировать данные из одной структуры в другую, при этом ввод данных должен выполняться из текстового файла(главная проблема в этом,...

Копирование структуры и данных одной таблицы в другую
Всем привет, возник вопрос при копировании таблицы из БД сервера в таблицу локальной БД. Клиент-серверное приложение. //Адаптер для...

2
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
12.10.2017, 23:02
1. используйте утилиты dg_dump/pg_restore

pg_dump - делает дамп (слепок) базы данных, можно только схему данных, можно только данные (разные параметры настраиваются)
pg_restore - соответственно это все восстанавливает
При pg_dump/pg_restore у вас промежуточным "буфером" будет файл с вашим дампом.

2. Можно использовать пайпы командной оболочки в стиле
Bash
1
pg_dump -h sever1 .... | pg_restore -h server2 ....
Приведите запрос полностью. Если ругается на выражение, значит вы действительно в чем-то накосячили и ПГ не понимает ваш запрос.
0
9 / 9 / 6
Регистрация: 02.02.2010
Сообщений: 35
13.10.2017, 14:05  [ТС]
спасибо огромное, буду сегодня пробовать сделать pg_dump.
а по поводу запроса dblink, я конечно могу где-то "косячить":
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT * FROM dblink ('hostaddr=__________ port=5432 dbname=_____ user=______ password=_________', 
                      'SELECT * FROM public.p_users') 
                     AS p_u(id NUMERIC, 
                                STATUS CHARACTER(1), 
                                LANGUAGE CHARACTER(2), 
                                expire_date TIMESTAMP WITHOUT TIME zone, 
                                expire_sessions NUMERIC, 
                                max_sessions NUMERIC, 
                                session_timeout NUMERIC, 
                                max_session_durat NUMERIC, 
                                last_login TIMESTAMP WITHOUT TIME zone, 
                                last_wrong_login TIMESTAMP WITHOUT TIME zone, 
                                login CHARACTER VARYING (50), 
                                password bytea, 
                                last_password_change TIMESTAMP WITHOUT TIME zone, 
                                failed_logins NUMERIC, 
                                failed_logins_in_row NUMERIC, 
                                created_date TIMESTAMP WITHOUT TIME zone);
Результат получается таблица в консоль. Но когда делаю
SQL
1
INSERT INTO users SELECT * FROM dblink (....) AS p_u (...);
вылетает ошибка ERROR: column "created_date" is of type timestamp without time zone but expression is of type numeric и подсказке You will need to rewrite or cast the expression. Хотя в таблицах оба поля имеют тип timestamp without time zone. Базы на разных серверах, поэтому думаю, что логинится правильно и данные берет тоже верно. Но вот почему такая ошибка когда пишу INSERT INTO я не знаю, может это из-за каких-то областей видимости псевдонима p_u? ведь в спецификации сказано:
Во время выполнения произойдёт ошибка, если действительный результат запроса из удалённой базы данных не будет
содержать столько столбцов, сколько указано в предложении FROM. Однако имена столбцов могут не совпадать, так же, как dblink не настаивает на точном совпадении типов. Функция завершится успешно, если возвращаемые строки данных будут допустимыми для ввода в тип столбца, объявленный в предложении FROM. (страница 2170 - Дополнительно поставляемые модули)

Добавлено через 4 часа 44 минуты
натупил, запрос dblink построен правильно, но две колонки поменяны местами в новой таблице.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.10.2017, 14:05
Помогаю со студенческими работами здесь

Копирование данных из одной таблицы в другую в пределах одной базы. Не работает счетчик
Делаю копирование данных из одной таблицы в другую в пределах одной базы. procedure TForm16.Button2Click(Sender: TObject); var ...

Копирование из одной дериктории в другую
Здравствуйте, в delphi новичек, сталкнулся с такой проблемой нужно в программу добавить кнопку при нажатии на которую происходило...

Копирование данных из одной БД в другую
Уважаемые знатоки ,можно ли сделать и как копирование из открытых БД.Необходимо копировать(нажатием кнопки) из БД называется...

Копирование таблицы из одной БД в другую
Добрый вечер, Уважаемые Форумчане! Подскажите, пожалуйста, как скопировать данные таблицы из одной БД в другую. БД сидят на разных...

Копирование из одной таблицы в другую
Доброго времени суток!нужна помощь. Хочу сделать Передачу id из одной таблицы в другую с помощью PHP, но ничего не получается. Из таблицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru