Каков предпочтительный способ запуска пакетного сценария SQL из PHP (Kohana) в БД Postgres? - PullRequest
1 голос
/ 26 октября 2011

Я настраиваю тестирование базы данных Postgres для проекта Kohana 3.2.Я хотел бы создать временную схему, запустить несколько сценариев sql из файла, чтобы установить схему, а затем провести тестирование, а затем удалить временную схему в tearDown.

Я попытался получить содержимое сценариевиспользование file_get_contents ($ sqlfilename), а затем использование Kohana's DB: query (), но это взлом и все равно не работает должным образом.

pg_execute не будет работать, потому что файлы являются пакетными сценариями

Я запускаю команды psql с exec ()?

Каков наилучший / предпочтительный способ запуска пакетных сценариев на БД Postgres из PHP?

Спасибо !!!

1 Ответ

3 голосов
/ 26 октября 2011

pg_query может выполнять несколько операторов:

запрос

Оператор SQL или операторы, которые должны быть выполнены. Когда в функцию передается несколько операторов, они автоматически выполняются как одна транзакция, если нет явных команд BEGIN / COMMIT включены в строку запроса. Тем не менее, используя несколько транзакций в один вызов функции не рекомендуется.

Данные внутри запроса должны быть правильно экранированы.

Таким образом, хакерский способ запуска пакетного скрипта был бы:

pg_query($conn, "BEGIN; COMMIT;\n" . file_get_contents($filename));

Единственная правильная альтернатива, которую я могу придумать, - это запустить psql как внешнюю программу:

system("psql < " . escapeshellarg($filename));

Я не проверял ни одного из них. Удачи.

...