Ошибка возврата файла Makefile расширения Postgresql

#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.