Tags
#lua #postgres #macos
Example on how to use Lua with luasql-postgres to query a public postgres database. This is more or less a followup to https://gist.github.com/zirkuswurstikus/3689d846cdd0d313a4e5448297127093 The steps are for macos but should give you an idea on how to do it on other platforms.
|
Note
|
see Tl;dr at the end. |
|
Tip
|
http://www.troubleshooters.com/codecorn/lua/luapostgres.htm#_Reading_and_Writing_Postgres_from_Lua |
Assume we only like to install luasql-postgres.
LUA=~/devop/lua/ cd $LUA
Getting libpq header file libpq-fe.h
brew install libpq luarocks install luasql-postgres PGSQL_INCDIR="/opt/homebrew/opt/libpq/include"
Accessing https://rnacentral.org/help/public-database a free public postgres database.
Query RNAcentral using VEGA identifiers. No, I have no idea what this is.
create example dir and cd to it
mkdir -p $LUA/example/ && cd $_
Create the file postgres_rna.lua
-- Import the LuaSQL PostgreSQL module
local luasql = require "luasql.postgres"
-- Check if the module loaded correctly
if not luasql then
error("Failed to load luasql.postgres module")
end
-- Create an environment object
local env = assert(luasql.postgres())
-- Establish a connection to the PostgreSQL database
local con = assert(env:connect('pfmegrnargs', 'reader', 'NWDMCE5xdipIjRrp', 'hh-pgsql-public.ebi.ac.uk', 5432))
-- Define the SQL query
local query = [[
SELECT
upi, -- RNAcentral URS identifier
taxid, -- NCBI taxid
ac -- external accession
FROM xref
WHERE ac IN ('OTTHUMT00000106564.1', 'OTTHUMT00000416802.1')
]]
-- Execute the query and get a cursor object
local cur = assert(con:execute(query))
-- Fetch and print the results
local row = cur:fetch({}, "a")
while row do
print(string.format("upi: %s, taxid: %s, ac: %s", row.upi, row.taxid, row.ac))
row = cur:fetch(row, "a")
end
-- Close the cursor, connection, and environment objects
cur:close()
con:close()
env:close()
test it
lua postgres_rna.lua # OUTPUT: # upi: URS00000B15DA, taxid: 9606, ac: OTTHUMT00000106564.1 # upi: URS00000A54A6, taxid: 9606, ac: OTTHUMT00000416802.1
It work’s
LUA=~/devop/lua/
cd $LUA
brew install libpq
luarocks install luasql-postgres PGSQL_INCDIR="/opt/homebrew/opt/libpq/include"
mkdir -p $LUA/example/ && cd $_
cat <<EOF > postgres_rna.lua
-- Import the LuaSQL PostgreSQL module
local luasql = require "luasql.postgres"
-- Check if the module loaded correctly
if not luasql then
error("Failed to load luasql.postgres module")
end
-- Create an environment object
local env = assert(luasql.postgres())
-- Establish a connection to the PostgreSQL database
local con = assert(env:connect('pfmegrnargs', 'reader', 'NWDMCE5xdipIjRrp', 'hh-pgsql-public.ebi.ac.uk', 5432))
-- Define the SQL query
local query = [[
SELECT
upi, -- RNAcentral URS identifier
taxid, -- NCBI taxid
ac -- external accession
FROM xref
WHERE ac IN ('OTTHUMT00000106564.1', 'OTTHUMT00000416802.1')
]]
-- Execute the query and get a cursor object
local cur = assert(con:execute(query))
-- Fetch and print the results
local row = cur:fetch({}, "a")
while row do
print(string.format("upi: %s, taxid: %s, ac: %s", row.upi, row.taxid, row.ac))
row = cur:fetch(row, "a")
end
-- Close the cursor, connection, and environment objects
cur:close()
con:close()
env:close()
EOF
# test it
lua postgres_rna.lua
# OUTPUT:
# upi: URS00000B15DA, taxid: 9606, ac: OTTHUMT00000106564.1
# upi: URS00000A54A6, taxid: 9606, ac: OTTHUMT00000416802.1
# It work's