Thread: Creating a database using ant

Creating a database using ant

From
Nathan McEachen
Date:
Hello,

I am trying to write get ant to drop and create a database.  I tried to
use the sql task but recieved the following error:

java.sql.SQLException: ERROR: DROP DATABASE cannot run inside a
transaction block

Here is my ant task:

        <sql driver="${db.postgresql.driver}"
            userid="${rootuser}"
            password="${rootpassword}"
            url="${db.postgresql.url}"
            onerror="stop"
            autocommit="false"
            src="${db.postgresql.sqlScripts.dir}/dropDatabase.sql">
            <classpath>
                <path refid="run.classpath"/>
            </classpath>
        </sql>

Although autocommit is false, it looks like the sql script is still
executing within a transaction.  Does anyone know a workaround?

I also tried runing the dropdb command directly, but (from my
understanding) ant cannot receive user input during execution.  As a
result, I can't supply a password to dropdb (at least I don't know how
to do it).

        <exec executable="${postgres_bin.dir}/dropdb"
              failonerror="true">
          <arg value="-U"/>
          <arg value="${rootuser}"/>
          <arg value="--password"/>
          <arg value="mydb"/>
        </exec>

Many thanks,

-Nathan

--
In theory, there is no difference between theory and practice.  But, in practice, there is.

--Jan L.A. van de Snepscheut



Re: Creating a database using ant

From
Oliver Jowett
Date:
Nathan McEachen wrote:

> java.sql.SQLException: ERROR: DROP DATABASE cannot run inside a
> transaction block

>            autocommit="false"

Try with autocommit="true".

-O

Re: Creating a database using ant

From
Jan de Visser
Date:
On Sunday 20 November 2005 23:24, Nathan McEachen wrote:
> Although autocommit is false, it looks like the sql script is still
> executing within a transaction.  Does anyone know a workaround?

You got it the wrong way around. autocommit=false gets you a transaction, i.e.
statements are *not* automatically committed when you have that set. You want
autocommit=true. I've done it (creating databases in ant) and it works...

JdV!!

--
--------------------------------------------------------------
Jan de Visser                     jdevisser@digitalfairway.com

                Baruk Khazad! Khazad ai-menu!
--------------------------------------------------------------