Home > Software engineering >  Can I pass a .sql file to psql?
Can I pass a .sql file to psql?

Time:10-24

I'm trying to pass a sql file to psql. After reading the docs, tried:

psql_args=(
    "password='$INPUT_PASSWORD'"
    dbname=analytics
    "host='$INPUT_HOST'"
    user=analytics
    port=32648
    file=query.sql
)

psql "${psql_args[*]}"
psql: error: invalid connection option "file"
root@380773cb4e26:/# 

If I remove the file=query.sql arg this results in a connection to psql. I just don't know how to pass it a query file?

On the docs, two arguments look like ones of interest here:

-f filename --file=filename

Read commands from the file filename, rather than standard input

and also:

-c command --command=command

Specifies that psql is to execute the given command string, command

I tried the file=query.sql one but that failed with the error message above.The command one wants a string whereas I want to pass a .sql file. I tried anyway:

psql_args=(
    "password='$INPUT_PASSWORD'"
    dbname=analytics
    "host='$INPUT_HOST'"
    user=analytics
    port=32648
    command=query.sql
)

psql "${psql_args[*]}"
psql: error: invalid connection option "command"

Is there a way that I can pass query.sql to psql in order to run a query?

CodePudding user response:

You seem to be packaging options up into a connection string. But --file must be given directly as an option to psql, not as part of a connection string.

psql "${psql_args[*]}" --file=query.sql

CodePudding user response:

Since other answer seem to overlook this.

Here is how to store dynamic options into an array, and pass it as arguments to the command:

#!/usr/bin/env bash

psql_args=(
    "--password=$INPUT_PASSWORD"
    "--dbname=analytics"
    "--host=$INPUT_HOST"
    "--user=analytics"
    "--port=32648"
    "--file=query.sql"
)

psql "${psql_args[@]}"
  • Related