Передача переменных в скрипт psql - PullRequest
0 голосов
/ 24 июня 2018

Я искал это некоторое время, но не могу найти однозначного ответа ... Я пытаюсь запустить скрипт psql из Терминала, передавая имя переменной таблицы и другую переменную как частьPSQL скрипт

Команда BASH:

psql db1 -U user1 -f '/.../Desktop/.../sample.sql' -v table=pg2 -v v1="'2018-02-01'"; 

Сценарий PSQL:

SELECT count(*) FROM :table WHERE datekey = :v1;

Вышеописанное работает.Однако я хотел бы иметь возможность преобразовать имя таблицы и дополнительную переменную в строку в самом скрипте, чтобы я мог использовать ее в другой определенной мной функции.Например, я хотел бы, чтобы имя таблицы pg2 было доступно в виде строки 'pg2'.Аналогичное требование с переменной datekey.Это возможно?Я заметил, что передача переменных возможна только в том случае, если она используется в операции CRUD или в предложении WHERE.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

В других ответах на стеке / других сайтах есть довольно простой способ приспособить это к самому сценарию psql.Например, исходная команда BASH была:

psql db1 -U user1 -f '/.../Desktop/.../sample.sql' -v table=pg2 -v v1="'2018-02-01'"; 

... и в сценарии необходимо было ввести два строковых параметра для функции plpgsql, называемой «copyFunction».Это стало возможным, поместив имя таблицы в кавычки после двоеточия и сохранив вторую переменную как есть.При необходимости вторая переменная также может быть заключена в кавычки, если это необходимо.

SELECT copyfunction(:'table', :v1);
0 голосов
/ 24 июня 2018

Из того, что я понял из вашего вопроса, является неправильное понимание того, что делают переменные в bash. Попробуйте, если скрипт ниже поможет:

#!/bin/bash

user="user1"
sqlfile='/.../Desktop/.../sample.sql'
table='pg2'
v1="'2018-02-01'"

psql db1 -U "$user" -f "$sqlfile" -v table=$table -v v1="$v1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...