我想检查所有表的存在。如果所有表都存在则发送1,如果缺少一个或多个表,则发送0。
select 1 from information_schema.tables tbl where tbl.table_name='graphe';
select 1 from information_schema.tables tbl where tbl.table_name='proprieteindicateur';
select 1 from information_schema.tables tbl where tbl.table_name='graphe_proprieteindicateur';
select 1 from information_schema.tables tbl where tbl.table_name='utilisateurs';
select 1 from information_schema.tables tbl where tbl.table_name='profil';
select 1 from information_schema.tables tbl where tbl.table_name='droit';
答案 0 :(得分:1)
这可以通过一个声明来完成:
with table_list (name) as (
values
('graphe'),
('proprieteindicateur'),
('graphe_proprieteindicateur'),
('utilisateurs'),
('profil'),
('droit')
)
select count(*) = (select count(*) from table_list)
from information_schema.tables it
join table_list l on it.table_name = l.name
and it.table_schema = 'public';
如果找到所有表格,它将返回true
,如果没有,则返回false
。
答案 1 :(得分:0)
您可以创建一个根据条件返回0或1的函数。例如(我无法访问Postgres数据库来检查语法!):
CREATE OR REPLACE FUNCTION checkTables()
RETURNS smallint AS
$BODY$
DECLARE
cnt smallint;
rntVal smallint;
begin
SELECT count(1)
INTO cnt
FROM information_schema.tables tbl
where tbl.table_name IN ('graphe',
'proprieteindicateur',
'graphe_proprieteindicateur',
'utilisateurs',
'profil',
'droit');
if(cnt == 6)then
rtnVal = 1
else
rtnVal = 0
end if;
end;
return rtnVal;
$BODY$
LANGUAGE plpgsql VOLATILE
答案 2 :(得分:0)
我找到了另一种效果很好的解决方案,但它在shell中。
PRESENCE_TABLE=$OK
for table in $LISTE_TABLE
do
TABLE_EXISTE=$(psql -t -w -f $FILE_SQL_VERIF_MDD --set nom=\'$table\' | tr -d " ")
if [ -z $TABLE_EXISTE ]
then
echo_log -e "La table $table n''existe pas en base."
PRESENCE_TABLE=$KO
fi
done
if [ $PRESENCE_TABLE -ne $OK ]
then
echo_log -e "Il manque de(s) table(s) dans le modele de donnees, il faut relancer le script avec l'option ...."
fct_exit $KO
fi
希望有所帮助