■ サンプル
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="init.db" name="SampleCodes">
<target name="init.db">
<exec executable="./etc/InitDb.sh" failonerror="yes" />
</target>
</project>
InitDb.sh
* InitDb.sh は実行権限を付与しておくこと(下記の注意を参照のこと)
#!/bin/bash
# hostname:port:database:username:password
echo "localhost:5432:*:postgres:postgres" > $HOME/.pgpass
echo "localhost:5432:*:admin:admin" >> $HOME/.pgpass
chmod 600 $HOME/.pgpass
psql -f ./etc/InitDb.sql -p 5432 -q -U postgres -h localhost
InitDb.sql
DROP DATABASE IF EXISTS sampledb;
DROP USER IF EXISTS admin;
CREATE USER admin WITH PASSWORD 'admin' CREATEDB;
CREATE DATABASE sampledb
WITH OWNER = admin
ENCODING = 'UTF8';
\c sampledb admin
DROP TABLE IF EXISTS person;
CREATE TABLE person
(
id character(8) NOT NULL,
name character varying(100),
sex character(1),
updatedate timestamp without time zone,
CONSTRAINT person_pkey PRIMARY KEY (id)
);
ALTER TABLE person
OWNER TO admin;
INSERT INTO person(
id, name, sex, updatedate)
VALUES ('X0000000', 'admin', 'm', Now()),
('X0000001', 'Mike', 'm', Now()),
('X0000002', 'Tom', 'm', Now());
出力結果
Buildfile: /home/admin/workspace/SampleCodes/build.xml
init.db:
[exec] DROP DATABASE
[exec] DROP ROLE
[exec] CREATE ROLE
[exec] CREATE DATABASE
[exec] データベース "sampledb" にユーザ"admin"として接続しました。
[exec] DROP TABLE
[exec] CREATE TABLE
[exec] ALTER TABLE
[exec] INSERT 0 3
[exec] psql:./etc/InitDb.sql:11: NOTICE: table "person" does not exist, skipping
[exec] psql:./etc/InitDb.sql:20: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "person_pkey" for table "person"
BUILD SUCCESSFUL
Total time: 1 second
■ 注意
* InitDb.shに、実行権限を付与しておかないと、以下のようなエラーが表示される
エラー内容
Buildfile: /home/dk/workspace/SampleCodes/build.xml
init.db:
BUILD FAILED
/home/dk/workspace/SampleCodes/build.xml:5: Execute failed: java.io.IOException: Cannot run program "./etc/InitDb.sh": error=13, 許可がありません
Total time: 555 milliseconds
解決策
chmod 777 ./etc/InitDb.sh