2016-10-04 81 views
0

我写了下面就PGXN指令的SQL扩展,但我总是make install的错误如下:PostgreSQL扩展的Makefile返回错误

/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" && 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 $^ > [email protected] 

DATA   = $(wildcard sql/*--*.sql) sql/$(EXTENSION)--$(EXTVERSION).sql 
EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql 
endif 

PGXS := $(shell $(PG_CONFIG) --pgxs) 
include $(PGXS) 

This blog表示此错误是由以下行引起的:

DATA = $(wildcard sql/*--*.sql) sql/$(EXTENSION)--$(EXTVERSION).sql 

,它将两次评估为相同的文件名(并且/ usr/bin/install拒绝覆盖该文件的第一个实例)。

但我该如何解决?

回答

1

您似乎从PGXN复制了Makefile,它可能比您需要的复杂得多。

例如,你的目标是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建议的文件组织。