Как вставить массив в запрос psql

#arrays #bash #psql

Вопрос:

Я пытаюсь вызвать массив bash в запрос psql, который находится внутри цикла for, но я не могу заставить его работать…

Это то, что у меня есть до сих пор

 #!/bin/bash  IFS=

Вывод - это просто пустые строки.


Комментарии:

1. Выполните все это в SQL, а не переводите первый результат запроса в массив Bash. Это может быть сделано в виде одного SQL-запроса с внутренним соединением самой таблицы групп.

Ответ №1:

Так лучше?

 #!/bin/bash IFS=


Комментарии:

1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?

2. Вот так? select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id но то, что он делает, больше похоже на: select id from groups where parent in ( select id from groups where parent = 127)

3. Выглядит примерно так

n' groupids=(`psql -X -A -d files -t -c 'select id from groups where parent=127'`) arr=${#groupids[@]} for (( x = 0; xlt;arr; x )); do users=$(psql -X -A -d files -t -c "select id from groups where parent=${groupids[${x}]}") echo $users done Вывод - это просто пустые строки.

Комментарии:

1. Выполните все это в SQL, а не переводите первый результат запроса в массив Bash. Это может быть сделано в виде одного SQL-запроса с внутренним соединением самой таблицы групп.

Ответ №1:

Так лучше?


Комментарии:

1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?

2. Вот так? select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id но то, что он делает, больше похоже на: select id from groups where parent in ( select id from groups where parent = 127)

3. Выглядит примерно так

n' read -r -d '' -a groupids lt; lt;(psql -X -A -d files -t -c 'select id from groups where parent=127') for gid in "${groupids[@]}" do # check that we're dealing with digits [[ $gid =~ ^[[:digit:]] $ ]] || { echo "invalid format: $gid" gt;amp;2; continue; } users=$(psql -X -A -d files -t -c "select id from groups where parent=$gid") echo "$users" done

Комментарии:

1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?

2. Вот так? select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id но то, что он делает, больше похоже на: select id from groups where parent in ( select id from groups where parent = 127)

3. Выглядит примерно так

n’ groupids=(`psql -X -A -d files -t -c ‘select id from groups where parent=127’`) arr=${#groupids[@]} for (( x = 0; xlt;arr; x )); do users=$(psql -X -A -d files -t -c «select id from groups where parent=${groupids[${x}]}») echo $users done

Вывод — это просто пустые строки.

Комментарии:

1. Выполните все это в SQL, а не переводите первый результат запроса в массив Bash. Это может быть сделано в виде одного SQL-запроса с внутренним соединением самой таблицы групп.

Ответ №1:

Так лучше?


Комментарии:

1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?

2. Вот так? select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id но то, что он делает, больше похоже на: select id from groups where parent in ( select id from groups where parent = 127)

3. Выглядит примерно так