2014-02-06 15 views
0

У нас есть корпоративное приложение на основе spring-java, которое предлагает каждому пользователю (одной корпорации) собственную базу данных. Поэтому, когда нам регистрируется новый пользователь (корпорация), они дают нам местоположение своей базы данных (postgreSQL), и нам нужно сделать свою пустую базу данных заполненной нашей схемой и нашими данными.
Мои Ques:Вставка схемы программно

Мне нужно автоматизировать процесс вставки схемы в базе данных программно.

Как я думаю, я должен это сделать:
Я создам некоторую процедуру, которая будет выполнять команды, связанные с вставкой схемы в предоставленную базу данных, но я не уверен, что это правдоподобный способ.

Есть ли такой процесс, который мы можем выполнить с API-интерфейсами соединителей базы данных? Боюсь, что нет.

Пожалуйста, люди делятся своими мыслями, Спасибо заранее

ответ

2

Вы можете посмотреть на FlyAway и LiquiBase

Оба этих инструментов поддержки создание схемы с нуля (запуск всех скриптов) или запуск подмножества скриптов в существующей базе данных для перехода от версии A до версии B.

+0

Спасибо за интерес, но можно ли это сделать так, как я упомянул? –

+0

Ни один из этих инструментов не использует хранимую процедуру. Вместо этого файлы SQL (или даже XML) выполняются в базе данных. Самое замечательное, что вы получаете от этого, - это управление версиями. И вы можете проверить свои сценарии в исходном контроле (git/subversion) –

2

Я думаю, что делать это так, как вы описываете, это ужасно, и вы должны использовать существующие инструменты, подобные тем, о которых упоминал Ланс, которые уже выполняют эту работу и делают это довольно хорошо.

Если вы настаиваете на том, чтобы делать это в своей программе, вы можете запускать заявления DDL непосредственно через PgJDBC или что угодно.

Если вы настаиваете на также окружив его в хранимых процедурах (почему?!?), Вы можете генерировать DDL как строки и запустить DDL с PL/PgSQL EXECUTE заявление:

CREATE OR REPLACE FUNCTION make_table() RETURNS void AS $$ 
BEGIN 
    EXECUTE 'CREATE TABLE test (x integer);'; 
END; 
$$ LANGUAGE plpgsql; 

(я предполагаю, вы не хотите просто написать DDL и засунуть его в процедуру как обычные инструкции, потому что это было бы еще страннее, если бы вы могли просто использовать скрипт SQL).

Смежные вопросы