36.10. Компиляция программ со встраиваемым SQL #
Теперь, когда вы получили представление, как писать программы на C со встраиваемым SQL, вы наверное хотите узнать, как их компилировать. Прежде чем компилировать код C, необходимо пропустить исходный файл через препроцессор встраиваемого SQL в C, который преобразует записанные вами операторы SQL в вызовы специальных функций. После компиляции полученный объектный код нужно скомпоновать со специальной библиотекой, содержащей необходимые функции. Эти функции получают информацию из аргументов, выполняют команды SQL через интерфейс libpq, и помещают результат в аргументы, заданные для вывода.
Программа препроцессора называется ecpg
и входит в состав обычной инсталляции Postgres Pro. Программам со встраиваемым SQL, как правило, даются имена с расширением .pgc
. Если вы создали код программы в файле prog1.pgc
, вы можете обработать его, просто выполнив:
ecpg prog1.pgc
При этом будет создан файл prog1.c
. Если имена входных файлов не следуют этому соглашению, имя выходного файла можно задать явно в аргументе -o
.
Обработанный препроцессором файл можно скомпилировать обычным образом, например, так:
cc -c prog1.c
В сгенерированные исходные файлы C включаются заголовочные файлы из инсталляции Postgres Pro, поэтому если вы установили Postgres Pro так, что соответствующий каталог не просматривается по умолчанию, вам придётся добавить указание вида -I/usr/local/pgsql/include
в командную строку компиляции.
Чтобы скомпоновать программу со встраиваемым SQL, необходимо подключить библиотеку libecpg
примерно так:
cc -o myprog prog1.o prog2.o ... -lecpg
Возможно, и для этого понадобится добавить в командную строку указание вида -L/usr/local/pgsql/lib
.
Чтобы узнать пути вашей инсталляции, можно воспользоваться командой pg_config
или pkg-config
(в качестве имени пакета нужно указать libecpg
).
Если вы организуете процесс сборки большого проекта с применением make, может быть удобно включить в ваши сборочные файлы следующее неявное правило:
ECPG = ecpg %.c: %.pgc $(ECPG) $<
Полный синтаксис вызова команды ecpg
приведён в описании ecpg.
Библиотека ecpg по умолчанию потокобезопасна. Однако для компиляции клиентского кода могут потребоваться параметры командной строки для настройки многопоточности.