How to run an SQL file in Postgres

Introduction to Running an SQL File in Postgres

This tutorial will explain how to run an SQL file in Postgres, using the .sql extension, in a terminal or command prompt window. This can be accomplished in one of two ways, from inside of the PSQL command-line interface itself or from outside of PSQL. The article will also provide an overview of the options for the commands used to run a SQL file in Postgres.

Prerequisites to Run an SQL file in Postgres

  • PostgreSQL must be properly installed and running. Execute the service postgresql status command to confirm the status of PostgreSQL is active. Press the CTRL + C keys to exit.

  • The interactive PSQL command-line for PostgreSQL must be properly installed and working. Execute the psql -V command to confirm the status. The results should resemble the following:

Screenshot of a terminal window getting the PostgreSQL server status and psql version

Create a SQL File that will Execute with PostgreSQL

Navigate to the project folder or directory by executing the cd (change directory) command in a terminal or command-prompt window.

Create an SQL file using a text editor or terminal-based editor

Create the SQL file with a text editor or a terminal-based editor like nano, gedit or vim. Execute the following bash command to enter the .sql file in the current directory using nano:

nano test.sql

Once inside, enter some SQL commands into the SQL file for later execution. Following is an example of a command used to return all of the record rows in the PostgreSQL table named some_table:

SELECT * FROM some_table;
/*
HERE IS A COMMENT
*/

The results should resemble the following:

Screenshot of the nano editor in a UNIX terminal editing a SQL file

NOTE: Just press CTRL+O to output any changes to the file in nano. However, be aware this will overwrite any changes to the file, or it will create a new file called test.sql if a file does not already exist.

Run a SQL file in Postgres using the ‘psql’ command

Now execute the SQL file in the terminal window. Confirm there is a database created with some table data that can be used to test the psql command. A role or user for that database will also be required.

Options for the ‘psql’ command to run a SQL file in Postgres

Following is a brief explanation of each of the options, or flags, used for the psql command that will execute the SQL script file:

psql -U USER_NAME_HERE — The -U flag is used to specify the user role that will execute the script. This option can be omited if this option’s username is the first parameter. The default username is the system’s current username, if one has not been explicitly specified.

psql -h 127.0.0.1 — The -h flag is for the remote host or domain IP address where the PostgreSQL server is running. Use 127.0.0.1 for a localhost server.

psql -d some_database — The -d option is used for the database name.

psql -a — The -a or --echo-all flags will print all of the lines in the SQL file that conatin any content.

psql -f /some/path/my_script_name.sql — The -f option will instruct psql to execute the file. This is arguably the most critical of all the options.

Execute the SQL file in PostgreSQL from the terminal

The final step in this process is to execute the file using the psql command while connecting with an username, host and database. Note that this example uses the objectrocket role.

The following command can be used to access the test.sql file created earlier:

psql objectrocket -h 127.0.0.1 -d some_database -f test.sql

Use the ‘-a’ option to print everything while executing a SQL file in Postgres

The -a option, also referred to as the --echo-all option, is used to echo, or print, all of the input lines that contain any content. This includes the SQL comments and the original SQL commands or statements being executed.

The following is an example of the --echo-all option:

psql objectrocket -h 127.0.0.1 -d some_database -f -a test.sql

The results should resemble the following:

Screenshot of an SQL file executed in a terminal using file option with psql

NOTE: Be aware that the -a option will print everything contained in the file, including commands and the original SQL statement.

Connect to PostgreSQL and then run a SQL file using ‘psql’

The \i command can aslo be used to execute the SQL file from within the psql interface.

Thepsql must be entered though a database and a specified user or by connecting to a database once inside psql, using a ROLE that has access to the database, with the \c command.

Connect to PostgreSQL without a database connection

The following example demonstrates how to connect to PostgreSQL with a specified ROLE, but without specifying a particular database:

psql postgres

The following example uses the \c command, followed by the database name, to connect to a database before executing the SQL script:

\c some_database

Execute the following \i command to run the SQL file:

\i \path\TO\file_name.sql

NOTE: If no path is specified, then PSQL will use the directory that was last accessed before connecting to PostgreSQL in order to execute the SQL file.

The following screenshot provides an overview:

Screenshot of a psql PostgreSQL connection accessing a database and then executing a SQL file

Conclusion to Executing a SQL File in Postgres

This tutorial explained two ways to run an SQL file in Postgres, specifically from inside the PSQL command-line interface or from outside of PSQL using the -f option. The article covered how to create an SQL file using a text editor or terminal-based editor that will execute with PostgreSQL, how to execute the SQL file from the terminal, connect to PostgreSQL and run a SQL file. The tutorial also covered how to run a SQL file in Postgres using the PSQL’ command and the options for the commands along with an explanation of each option. Remember that if no path is specified when connecting to PostgreSQL without a database connection, PSQL will use the directory that was last accessed prior connecting to PostgreSQL to execute the SQL file.

Pilot the ObjectRocket Platform Free!

Try Fully-Managed CockroachDB, Elasticsearch, MongoDB, PostgreSQL (Beta) or Redis.

Get Started

Keep in the know!

Subscribe to our emails and we’ll let you know what’s going on at ObjectRocket. We hate spam and make it easy to unsubscribe.