#postgresql #makefile
#postgresql #makefile
Вопрос:
Я написал расширение SQL, следуя инструкциям в PGXN, но я всегда получаю ошибку make install следующим образом:
/bin/mkdir -p '/usr/share/postgresql/9.5/extension'
/bin/mkdir -p '/usr/share/postgresql/9.5/extension'
/bin/mkdir -p '/usr/share/doc/postgresql-doc-9.5/extension'
/usr/bin/install -c -m 644 .//myextname.control '/usr/share/postgresql/9.5/extension/'
/usr/bin/install -c -m 644 .//sql/myextname--1.0.0.sql .//sql/myextname--1.0.0.sql '/usr/share/postgresql/9.5/extension/'
/usr/bin/install: will not overwrite just-created ‘/usr/share/postgresql/9.5/extension/myextname--1.0.0.sql’ with ‘.//sql/myextname--1.0.0.sql’
make: *** [install] Error 1
Мой Makefile выглядит следующим образом:
EXTENSION = myextname
EXTVERSION = $(shell grep default_version $(EXTENSION).control |
sed -e "s/default_version[[:space:]]*=[[:space:]]*'([^']*)'/1/")
DATA = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql))
TESTS = $(wildcard test/sql/*.sql)
REGRESS = $(patsubst test/sql/%.sql,%,$(TESTS))
REGRESS_OPTS = --inputdir=test
DOCS = $(wildcard doc/*.md)
MODULES = $(patsubst %.c,%,$(wildcard src/*.c))
PG_CONFIG = pg_config
PG91 = $(shell $(PG_CONFIG) --version | grep -qE " 8\.| 9\.0" amp;amp; echo no || echo yes)
ifeq ($(PG91),yes)
all: sql/$(EXTENSION)--$(EXTVERSION).sql
sql/$(EXTENSION)--$(EXTVERSION).sql: $(strip sql/tables.sql
sql/types.sql
sql/domains.sql
)
cat $^ > $@
DATA = $(wildcard sql/*--*.sql) sql/$(EXTENSION)--$(EXTVERSION).sql
EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql
endif
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
В этом блоге говорится, что эта ошибка вызвана этой строкой:
DATA = $(wildcard sql/*--*.sql) sql/$(EXTENSION)--$(EXTVERSION).sql
которое дважды преобразуется в одно и то же имя файла (и /usr/bin/install отказывается перезаписывать первый экземпляр файла).
Но как я могу это исправить?
Ответ №1:
Похоже, вы скопировали файл Makefile
из PGXN, и это, вероятно, намного сложнее, чем вам нужно.
Например, вы ориентируетесь на версии PostgreSQL ниже 9.1?
Вам будет намного лучше с небольшим, простым пользовательским интерфейсом, подобранным Makefile
таким образом:
MODULES = src/myextname
EXTENSION = myextname
DATA = sql/myextname--1.0.sql
DOCS = doc/myextname.md
REGRESS = myextname
REGRESS_OPTS = --inputdir=test
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
Это (непроверенное) Makefile
соответствует файловой организации, предложенной PGXN.