作者:农大军乐团_697 | 2023-09-01 09:33
在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.
推荐阅读
如何解决《Eclipse:我的android应用程序在启动时崩溃了》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《如何使用R中的Openxlsx包修改Excel工作簿中的现有工作表?》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《如何在AndroidMarshmallow中创建wifi网络共享热点?》经验,为你挑选了0个好方法。 ...
[详细]
如何解决《我可以使RealmResults类使用协议作为泛型吗?》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《如何在具有隐式参数的函数上调用Private》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《什么可以使std::map找不到它的一个键?》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《Linq加入查询错误》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《如何将预先填充的文本消息发送给特定(预期)Whats-App用户/用户?》经验,为你挑选了0个好方法。 ...
[详细]
如何解决《学习Netsuite》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《包括头文件进行分析之后,请告诉我有关cppcheck的用途或工作方式》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《JDBC是否在将日期插入OracleDB之前调整日期?我该如何防止这种情况?》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《在类"对象"中定义的==运算符在哪里?》经验,为你挑选了2个好方法。 ...
[详细]
如何解决《有没有办法在babelify中关闭"超级之前不允许这样的规则"?》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《Bootstrap3无法在Symfony3中运行》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《使用Javascript下载HTML5mp4视频》经验,为你挑选了0个好方法。 ...
[详细]
如何解决《如何在android中的数组列表中获取特定值的索引》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《在带有colspan和rowspan的表中重复》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《安装perl模块和复制整个文件夹有什么区别?》经验,为你挑选了1个好方法。 ...
[详细]
如何解决《@Bean和@Autowired之间的区别》经验,为你挑选了3个好方法。 ...
[详细]
如何解决《如何将UTF-8数据与Latin1MySQL数据库表中保存的相同数据进行比较》经验,为你挑选了1个好方法。 ...
[详细]