让 Liquibase 执行一个 shp2pgsql PostGIS 命令
Make Liquibase execute a shp2pgsql PostGIS command
我有一个针对 PostGis 数据库的 Liquibase 变更集:
<!--Création de la table et vue sur les données du chômage dans les communes en 2016 -->
<changeSet id="chomage_2016" author="mlebihan">
<comment>Table du chômage par communes en 2016.</comment>
<sql>
CREATE TABLE chomage_2016(
codecommune VARCHAR(5) PRIMARY KEY,
nomcommune VARCHAR NOT NULL,
sirencommune VARCHAR NOT NULL,
populationtotale NUMERIC(10) NOT NULL,
nombre NUMERIC(10) NOT NULL,
effectifs NUMERIC(10) NOT NULL,
pctsurpopactive NUMERIC(4,1) NOT NULL,
pctsurpoptotale NUMERIC(4,1) NOT NULL
)
TABLESPACE data;
COMMENT ON TABLE chomage_2016 IS 'Taux de chômage dans les communes en 2016';
COMMENT ON COLUMN chomage_2016.codecommune IS 'Code de la commune';
COMMENT ON COLUMN chomage_2016.nomcommune IS 'Nom de la commune';
COMMENT ON COLUMN chomage_2016.sirencommune IS 'SIREN de la commune';
COMMENT ON COLUMN chomage_2016.populationtotale IS 'Population totale de la commune (en 2019)';
COMMENT ON COLUMN chomage_2016.nombre IS 'Nombre de chômeurs';
COMMENT ON COLUMN chomage_2016.effectifs IS 'Population de plus de 15 ans en 2016';
COMMENT ON COLUMN chomage_2016.pctsurpopactive IS 'Pourcentage sur la population de plus de 15 ans';
COMMENT ON COLUMN chomage_2016.pctsurpoptotale IS 'Pourcentage sur la population totale de la commune';
CREATE INDEX idx_chomage_2016_codeCommune ON chomage_2016(codecommune) TABLESPACE data;
COMMENT ON INDEX idx_chomage_2016_codeCommune IS 'Taux de chômage dans les communes en 2016, par code commune.';
CREATE VIEW view_chomage_2016 AS
SELECT row_number() OVER () AS gid, d.codeCommune, d.nomCommune, d.sirencommune, d.populationtotale,
d.nombre, d.effectifs, d.pctsurpopactive, d.pctsurpoptotale, c.geom FROM chomage_2016 d
JOIN communes_2019 c ON d.codeCommune = c.insee;
COMMENT ON VIEW view_chomage_2016 IS 'Vue entre les taux de chômage de 2016 et communes (OSM) de 2019.';
</sql>
<rollback>
<sql>
DROP VIEW view_chomage_2016;
DROP INDEX idx_chomage_2016_codeCommune;
DROP TABLE chomage_2016;
</sql>
</rollback>
</changeSet>
它创建的视图取决于 commune_2019
table,它是由 PostGISOpenStreetMap shapefile 创建的commune_2019
table =25=] 当前从 bash shell 执行的命令:
shp2pgsql -s 4326 -I /data/comptes-france/territoire/2019/communes.shp public.communes_2019 | psql -d comptesfrance -U postgres -h localhost
我想将此命令的执行集成到我的 Liquibase 脚本中。
可能吗?
shp2pgsql
命令的执行将其 SQL 生成的语句发送给需要密码才能连接的 psql
到数据库,并且该密码无法通过其命令行发送。我用 export PGPASSWORD=...
.
设置了它
export
命令不是真正的可执行文件,而是 bash
.
的内置命令
因此,必须通过 bash
命令调用它。 bash 命令带有一个 -c
选项,它会启动一个新会话,shp2pgsql
必须紧随其后。
<!-- shp2pgsql -s 4326 -I /data/comptes-france/territoire/2016/communes.shp public.communes_2016 | psql -d comptesfrance -U postgres -h localhost -->
<changeSet id="shp2pgsql_communes_2019" author="mlebihan" failOnError="false">
<comment>Importation des shapefiles des contours des communes 2019</comment>
<executeCommand executable="/bin/bash">
<arg value="-c"/>
<arg value="export PGPASSWORD=postgres;
shp2pgsql
-s 4326
-I /data/comptes-france/territoire/2019/communes.shp
public.communes_2019
| psql -d comptesfrance -U postgres -h localhost"/>
</executeCommand>
</changeSet>
注意:第二个参数我写了换行是为了更好的可读性,但当然不是这样,你必须这样写:
<arg value="export PGPASSWORD=postgres;shp2pgsql -s 4326 -I /data/comptes-france/territoire/2019/communes.shp public.communes_2019 | psql -d comptesfrance -U postgres -h localhost"/>
我有一个针对 PostGis 数据库的 Liquibase 变更集:
<!--Création de la table et vue sur les données du chômage dans les communes en 2016 -->
<changeSet id="chomage_2016" author="mlebihan">
<comment>Table du chômage par communes en 2016.</comment>
<sql>
CREATE TABLE chomage_2016(
codecommune VARCHAR(5) PRIMARY KEY,
nomcommune VARCHAR NOT NULL,
sirencommune VARCHAR NOT NULL,
populationtotale NUMERIC(10) NOT NULL,
nombre NUMERIC(10) NOT NULL,
effectifs NUMERIC(10) NOT NULL,
pctsurpopactive NUMERIC(4,1) NOT NULL,
pctsurpoptotale NUMERIC(4,1) NOT NULL
)
TABLESPACE data;
COMMENT ON TABLE chomage_2016 IS 'Taux de chômage dans les communes en 2016';
COMMENT ON COLUMN chomage_2016.codecommune IS 'Code de la commune';
COMMENT ON COLUMN chomage_2016.nomcommune IS 'Nom de la commune';
COMMENT ON COLUMN chomage_2016.sirencommune IS 'SIREN de la commune';
COMMENT ON COLUMN chomage_2016.populationtotale IS 'Population totale de la commune (en 2019)';
COMMENT ON COLUMN chomage_2016.nombre IS 'Nombre de chômeurs';
COMMENT ON COLUMN chomage_2016.effectifs IS 'Population de plus de 15 ans en 2016';
COMMENT ON COLUMN chomage_2016.pctsurpopactive IS 'Pourcentage sur la population de plus de 15 ans';
COMMENT ON COLUMN chomage_2016.pctsurpoptotale IS 'Pourcentage sur la population totale de la commune';
CREATE INDEX idx_chomage_2016_codeCommune ON chomage_2016(codecommune) TABLESPACE data;
COMMENT ON INDEX idx_chomage_2016_codeCommune IS 'Taux de chômage dans les communes en 2016, par code commune.';
CREATE VIEW view_chomage_2016 AS
SELECT row_number() OVER () AS gid, d.codeCommune, d.nomCommune, d.sirencommune, d.populationtotale,
d.nombre, d.effectifs, d.pctsurpopactive, d.pctsurpoptotale, c.geom FROM chomage_2016 d
JOIN communes_2019 c ON d.codeCommune = c.insee;
COMMENT ON VIEW view_chomage_2016 IS 'Vue entre les taux de chômage de 2016 et communes (OSM) de 2019.';
</sql>
<rollback>
<sql>
DROP VIEW view_chomage_2016;
DROP INDEX idx_chomage_2016_codeCommune;
DROP TABLE chomage_2016;
</sql>
</rollback>
</changeSet>
它创建的视图取决于 commune_2019
table,它是由 PostGISOpenStreetMap shapefile 创建的commune_2019
table =25=] 当前从 bash shell 执行的命令:
shp2pgsql -s 4326 -I /data/comptes-france/territoire/2019/communes.shp public.communes_2019 | psql -d comptesfrance -U postgres -h localhost
我想将此命令的执行集成到我的 Liquibase 脚本中。
可能吗?
shp2pgsql
命令的执行将其 SQL 生成的语句发送给需要密码才能连接的psql
到数据库,并且该密码无法通过其命令行发送。我用export PGPASSWORD=...
.export
命令不是真正的可执行文件,而是bash
.
的内置命令 因此,必须通过bash
命令调用它。 bash 命令带有一个-c
选项,它会启动一个新会话,shp2pgsql
必须紧随其后。
<!-- shp2pgsql -s 4326 -I /data/comptes-france/territoire/2016/communes.shp public.communes_2016 | psql -d comptesfrance -U postgres -h localhost -->
<changeSet id="shp2pgsql_communes_2019" author="mlebihan" failOnError="false">
<comment>Importation des shapefiles des contours des communes 2019</comment>
<executeCommand executable="/bin/bash">
<arg value="-c"/>
<arg value="export PGPASSWORD=postgres;
shp2pgsql
-s 4326
-I /data/comptes-france/territoire/2019/communes.shp
public.communes_2019
| psql -d comptesfrance -U postgres -h localhost"/>
</executeCommand>
</changeSet>
注意:第二个参数我写了换行是为了更好的可读性,但当然不是这样,你必须这样写:
<arg value="export PGPASSWORD=postgres;shp2pgsql -s 4326 -I /data/comptes-france/territoire/2019/communes.shp public.communes_2019 | psql -d comptesfrance -U postgres -h localhost"/>