Bash function from psql (v14)

Started by Murthy Nunnaover 1 year ago5 messagesgeneral
Jump to latest
#1Murthy Nunna
mnunna@fnal.gov

Hi,

I am trying to code bash function and call it from psql. But it is failing. How can I get this to work. Creating a separate script instead of a function works, but I do not want to do that. I have too many variables to be passed back and forth. Any ideas?

#!/bin/bash
psql -d postgres -p 5433 <<-PSQLBLOCK
\! run-bash-function -- This doesn't work
PSQLBLOCK

# Run the function outside PSQLBLOCK. This works!
run-bash-function
exit $?

# Create bash function
run-bash-function ()
{
echo "in bash function"
}
# end of bash script

Run the above script:
./test-bash-function.sh
sh: line 1: run-bash-function: command not found
in bash function

#2Efrain J. Berdecia
ejberdecia@yahoo.com
In reply to: Murthy Nunna (#1)
Re: Bash function from psql (v14)

Maybe try using full path...

Yahoo Mail: Search, Organize, Conquer

On Sat, Nov 9, 2024 at 12:41 PM, Murthy Nunna<mnunna@fnal.gov> wrote:
<!--#yiv2777555521 filtered {}#yiv2777555521 filtered {}#yiv2777555521 p.yiv2777555521MsoNormal, #yiv2777555521 li.yiv2777555521MsoNormal, #yiv2777555521 div.yiv2777555521MsoNormal {margin:0in;font-size:11.0pt;font-family:"Calibri", sans-serif;}#yiv2777555521 span.yiv2777555521EmailStyle17 {font-family:"Calibri", sans-serif;color:windowtext;font-weight:normal;font-style:normal;}#yiv2777555521 .yiv2777555521MsoChpDefault {}#yiv2777555521 filtered {}#yiv2777555521 div.yiv2777555521WordSection1 {}-->
Hi,

 

I am trying to code bash function and call it from psql. But it is failing. How can I get this to work. Creating a separate script instead of a function works, but I do not want to do that. I have too many variables to be passed back and forth. Any ideas?

 

#!/bin/bash

psql -d postgres  -p 5433 <<-PSQLBLOCK

\! run-bash-function                                        -- This doesn’t work

PSQLBLOCK

 

# Run the function outside PSQLBLOCK. This works!

run-bash-function

exit $?

 

# Create bash function

run-bash-function ()

{

  echo "in bash function"

}

# end of bash script

 

 

Run the above script:

./test-bash-function.sh

sh: line 1: run-bash-function: command not found

in bash function

 

#3Vijaykumar Jain
vijaykumarjain.github@gmail.com
In reply to: Murthy Nunna (#1)
Re: Bash function from psql (v14)

On Sat, 9 Nov 2024 at 23:11, Murthy Nunna <mnunna@fnal.gov> wrote:

I am trying to code bash function and call it from psql. But it is failing. How can I get this to work. Creating a separate script instead of a function works, but I do not want to do that. I have too many variables to be passed back and forth. Any ideas?

Run the above script:

./test-bash-function.sh

sh: line 1: run-bash-function: command not found

in bash function

/*

postgres@ubuntu:/tmp$ echo 'whoami' >> myscript.sh
postgres@ubuntu:/tmp$ chmod a+x myscript.sh
postgres@ubuntu:/tmp$ psql <<EOS
\! bash /tmp/myscript.sh
EOS

postgres

*/

--
Thanks,
Vijay

Open to work
Resume - Vijaykumar Jain

#4Greg Sabino Mullane
greg@turnstep.com
In reply to: Murthy Nunna (#1)
Re: Bash function from psql (v14)

What problem are you trying to solve? If you tell us that, we can guide you
to some better solutions.

There are numerous issues here, but the most important are:

1) Calling a shell via \! invokes an entirely new process: there is no link
to the parent or grandparent process

2) The run-bash-function must be declared before being called, so that bash
code was never going to work anyway. In other words, this is valid:

run-bash-function() { echo "Here we are"; }

run-bash-function

This version is not:

run-bash-function

run-bash-function() { echo "Here we are"; }

Cheers,
Greg

#5Murthy Nunna
mnunna@fnal.gov
In reply to: Greg Sabino Mullane (#4)
RE: Bash function from psql (v14)

Thanks, Greg.

1. This means what I am trying to do is not meant to work. This won’t work even if I declare the function before calling it in PSQL. I get it.
2. You are correct. Function must be declared before the call.

Thanks again.