从命令行创建PostgreSQL函数

时间:2017-04-17 21:40:56

标签: postgresql

我正在尝试创建一个允许我在数据库中执行多个查询的函数。这是我第一次尝试将命令行用于此目标。我正在使用PostgreSQL在Linux系统(Ubuntu)中工作。

我的Pgsql:

create function my_function(idteste integer, nome character varying, tipo integer, morada character varying, cpostal character varying, telefone character varying, nif character varying, nacionalidade character varying, iban character varying, moradaimag character varying, cc1 character varying, ccimage1 character varying, ccimage2 character varying, datanascimento date)
returns character varying as $tempvar$
declare tempvar character varying;
begin
tempvar := 'null';
if (select count(id_teste) from singulares where id_idteste=idteste) = 0 then
update pessoas set  
nome_pessoal=nome,
tipo_pesoal = tipo,     
morada_pessoal=morada,
cpostal_pessoal=cpostal,
telefone_pessoal=telefone,
nif_pessoal=nif,
nacionalidade_pessoal=nacionalidade,
iban_pessoal=iban,
cmorada_img=cmoradaimag
where
id_teste=idteste;
insert into singulares (pessoas_idteste, cc, cc_img1, cc_img2, data_nascimento) values(idteste, cc1, ccimage1, ccimage2, datanascimento);
tempvar := 'gravado com sucesso';
else
update pessoas set  
nome_pessoal=nome,
tipo_pesoal = tipo,     
morada_pessoal=morada,
cpostal_pessoal=cpostal,
telefone_pessoal=telefone,
nif_pessoal=nif,
nacionalidade_pessoal=nacionalidade,
iban_pessoal=iban,
cmorada_img=cmoradaimag
where
id_teste=idteste;
update singulares set 
cc=cc1,
cc_img1=ccimage1,
cc_img2=ccimage2
where 
pessoas_idteste=idteste;
tempvar := 'alterado com sucesso';
end if;
return tempvar; 
end
$tempvar$  language plpgsql; 

我的第一个问题是如何通过命令行创建函数?

创建函数时的第二个问题,这是否可以从PGmyadmin中看到?

1 个答案:

答案 0 :(得分:2)

假设您的函数存储在脚本文件create_my_function.sql中并且您要在用户testdb拥有的数据库testuser中创建它,这是创建它的一种方法:

psql -h localhost -U testuser -d testdb -f create_my_function.sql

我不确定我理解你的第二个问题,但是一旦创建了该函数,它应该在任何有效的数据库管理工具中都可见。