Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

postgreSQL - psql \i : how to execute script in a given path

Tags:

postgresql

I'm new to postgreSQL and I have a simple question:

I'm trying to create a simple script that creates a DB so I can later call it like this:

psql -f createDB.sql 

I want the script to call other scripts (separate ones for creating tables, adding constraints, functions etc), like this:

\i script1.sql \i script2.sql 

It works fine provided that createDB.sql is in the same dir.

But if I move script2 to a directory under the one with createDB, and modify the createDB so it looks like this:

\i script1.sql \i somedir\script2.sql 

I get an error:

psql:createDB.sql:2: somedir: Permission denied

I'm using Postgres Plus 8.3 for windows, default postgres user.

EDIT:

Silly me, unix slashes solved the problem.

like image 771
dahpgjgamgan Avatar asked Sep 24 '08 19:09

dahpgjgamgan


People also ask

How do I run a script in PostgreSQL?

Another easiest and most used way to run any SQL file in PostgreSQL is via its SQL shell. Open the SQL shell from the menu bar of Windows 10. Add your server name, database name where you want to import the file, the port number you are currently active on, PostgreSQL username, and password to start using SQL shell.

How do I run a DDL script in PostgreSQL?

To run DDL in the form of an SQL script, you should use psql , the same command you use to connect to the server interactively. I recommend using ON_ERROR_STOP=1 and -1 , so it runs the DDL in a single transaction and aborts on any error.

How do you use script variables in psql?

If you want to use the variable as the value in a conditional string query, such as ... SELECT * FROM table1 WHERE column1 = ':myvariable'; ... then you need to include the quotes in the variable itself as the above will not work. Instead define your variable as such ...


2 Answers

Postgres started on Linux/Unix. I suspect that reversing the slash with fix it.

\i somedir/script2.sql  

If you need to fully qualify something

\i c:/somedir/script2.sql 

If that doesn't fix it, my next guess would be you need to escape the backslash.

\i somedir\\script2.sql 
like image 75
Steve K Avatar answered Sep 19 '22 23:09

Steve K


Have you tried using Unix style slashes (/ instead of \)?

\ is often an escape or command character, and may be the source of confusion. I have never had issues with this, but I also do not have Windows, so I cannot test it.

Additionally, the permissions may be based on the user running psql, or maybe the user executing the postmaster service, check that both have read to that file in that directory.

like image 31
Grant Johnson Avatar answered Sep 19 '22 23:09

Grant Johnson