当前位置:  开发笔记 > 数据库 > 正文

Postgresql:如果表格尚不存在,如何创建表格?

如何解决《Postgresql:如果表格尚不存在,如何创建表格?》经验,为你挑选了5个好方法。

在Postgresql中,如果表格尚不存在,我怎么能创建一个条件?

代码示例赞赏.



1> Skalli..:

我不确定它何时被添加,但为了完整起见,我想指出在版本9.1(可能之前)IF NOT EXISTS中可以使用.IF NOT EXISTS只有在不存在的情况下才会创建表.

例:

CREATE TABLE IF NOT EXISTS users.vip
(
  id integer
)

如果表不存在,这将创建vip在模式中命名users的表.

资源


它已在**9.1**中实施.

2> Michael Buen..:
create or replace function update_the_db() returns void as
$$
begin

    if not exists(select * from information_schema.tables 
        where 
            table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
            and table_name = 'your_table_name_here') then

        create table your_table_name_here
        (
            the_id int not null,
            name text
        );

    end if;

end;
$$
language 'plpgsql';

select update_the_db();
drop function update_the_db();



3> Jared..:

只需创建表,不要担心它是否存在.如果它不存在,它将被创建; 如果确实存在,则不会修改表.您始终可以检查SQL查询的返回值,以查看执行create语句时表是否存在.


就个人而言,我认为这种答案/思考会鼓励不良行为.如果我希望表可能存在,那么必须对其进行测试,而不是检查错误情况.也许在2011年,范式的工作方式不同?现在,当一个人试图创建一个已经存在的表时,dbms会创建一个错误.
大多数情况下你确实不必担心.当创建发生在事务中时,因为它会导致事务中止.

4> 小智..:

我想检查一下pg_class表可能对你有帮助,比如说:

SELECT COUNT (relname) as a FROM pg_class WHERE relname = 'mytable'

if a = 0 then (CREATE IT)

问候.



5> vol7ron..:

这是一个老问题.我只是带回来提出另一个答案.注意:其他更好的答案已经存在,这仅用于教育目的.

最简单的方法是做别人说的话; 如果要保留现有数据,请执行CREATE TABLE;如果需要新创建的表,则执行DROP IF EXISTS,然后执行CREATE TABLE.

另一种方法是查询系统表的存在并从那里继续.

SELECT true FROM pg_tables WHERE tablename =  [AND schemaname = ];


正在使用:

-- schema independent:
SELECT true FROM pg_tables WHERE tablename = 'foo';

-- schema dependent:
SELECT true FROM pg_tables WHERE tablename = 'foo' AND schemaname = 'bar';

如果它匹配,你将有一个真值,否则它应该返回一个空数据集.您可以使用该值来确定是否需要执行CREATE TABLE.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有