您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

PostgreSQL 如果不存在则创建表

PostgreSQL 如果不存在则创建表

功能实现

CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
@H_502_5@


 

对于,这里有一个功能可以解决它:

CREATE OR REPLACE FUNCTION create_mytable()
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   IF EXISTS (SELECT FROM pg_catalog.pg_tables 
              WHERE  schemaname = 'myschema'
              AND    tablename  = 'mytable') THEN
      RAISE NOTICE 'Table myschema.mytable already exists.';
   ELSE
      CREATE TABLE myschema.mytable (i integer);
   END IF;
END
$func$;
@H_502_5@

称呼:

SELECT create_mytable();        -- call as many times as you want. 
@H_502_5@

笔记:

  • schemanametablenameinpg_tables区分大小写。如果在CREATE TABLE语句中双引号标识符,则需要使用完全相同的拼写。如果不这样做,则需要使用小写字符串。
  • pg_tables只包含实际。该标识符可能仍被相关对象占用。、
  • 如果角色执行功能不具备必要的权限,以创建表,你可能想使用SECURITY DEFINER功能,使其拥有与必要的权限另一个角色。这个版本足够安全。

解决方法

在 MySQL 脚本中,您可以编写:

CREATE TABLE IF NOT EXISTS foo ...;

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
CREATE OR REPLACE FUNCTION create_mytable()
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   IF EXISTS (SELECT FROM pg_catalog.pg_tables 
              WHERE  schemaname = 'myschema'
              AND    tablename  = 'mytable') THEN
      RAISE NOTICE 'Table myschema.mytable already exists.';
   ELSE
      CREATE TABLE myschema.mytable (i integer);
   END IF;
END
$func$;
@H_502_5@

称呼:

SELECT create_mytable();        -- call as many times as you want. 
@H_502_5@

笔记:

  • schemanametablenameinpg_tables区分大小写。如果在CREATE TABLE语句中双引号标识符,则需要使用完全相同的拼写。如果不这样做,则需要使用小写字符串。
  • pg_tables只包含实际。该标识符可能仍被相关对象占用。、
  • 如果角色执行功能不具备必要的权限,以创建表,你可能想使用SECURITY DEFINER功能,使其拥有与必要的权限另一个角色。这个版本足够安全。

解决方法

在 MySQL 脚本中,您可以编写:

CREATE TABLE IF NOT EXISTS foo ...;

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
SELECT create_mytable();        -- call as many times as you want. 
@H_502_5@

笔记:

  • schemanametablenameinpg_tables区分大小写。如果在CREATE TABLE语句中双引号标识符,则需要使用完全相同的拼写。如果不这样做,则需要使用小写字符串。
  • pg_tables只包含实际。该标识符可能仍被相关对象占用。、
  • 如果角色执行功能不具备必要的权限,以创建表,你可能想使用SECURITY DEFINER功能,使其拥有与必要的权限另一个角色。这个版本足够安全。

解决方法

在 MySQL 脚本中,您可以编写:

CREATE TABLE IF NOT EXISTS foo ...;

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
CREATE TABLE IF NOT EXISTS foo ...;

对于,这里有一个功能可以解决它:

称呼:

笔记:

在 MySQL 脚本中,您可以编写:

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

对于,这里有一个功能可以解决它:

CREATE OR REPLACE FUNCTION create_mytable()
  RETURNS void
  LANGUAGE plpgsql AS
$func$
BEGIN
   IF EXISTS (SELECT FROM pg_catalog.pg_tables 
              WHERE  schemaname = 'myschema'
              AND    tablename  = 'mytable') THEN
      RAISE NOTICE 'Table myschema.mytable already exists.';
   ELSE
      CREATE TABLE myschema.mytable (i integer);
   END IF;
END
$func$;
@H_502_5@

称呼:

SELECT create_mytable();        -- call as many times as you want. 
@H_502_5@

笔记:

  • schemanametablenameinpg_tables区分大小写。如果在CREATE TABLE语句中双引号标识符,则需要使用完全相同的拼写。如果不这样做,则需要使用小写字符串。
  • pg_tables只包含实际。该标识符可能仍被相关对象占用。、
  • 如果角色执行功能不具备必要的权限,以创建表,你可能想使用SECURITY DEFINER功能,使其拥有与必要的权限另一个角色。这个版本足够安全。

解决方法

在 MySQL 脚本中,您可以编写:

CREATE TABLE IF NOT EXISTS foo ...;

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
SELECT create_mytable();        -- call as many times as you want. 
@H_502_5@

笔记:

  • schemanametablenameinpg_tables区分大小写。如果在CREATE TABLE语句中双引号标识符,则需要使用完全相同的拼写。如果不这样做,则需要使用小写字符串。
  • pg_tables只包含实际。该标识符可能仍被相关对象占用。、
  • 如果角色执行功能不具备必要的权限,以创建表,你可能想使用SECURITY DEFINER功能,使其拥有与必要的权限另一个角色。这个版本足够安全。

解决方法

在 MySQL 脚本中,您可以编写:

CREATE TABLE IF NOT EXISTS foo ...;

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
CREATE TABLE IF NOT EXISTS foo ...;

称呼:

笔记:

在 MySQL 脚本中,您可以编写:

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

称呼:

SELECT create_mytable();        -- call as many times as you want. 
@H_502_5@

笔记:

  • schemanametablenameinpg_tables区分大小写。如果在CREATE TABLE语句中双引号标识符,则需要使用完全相同的拼写。如果不这样做,则需要使用小写字符串。
  • pg_tables只包含实际。该标识符可能仍被相关对象占用。、
  • 如果角色执行功能不具备必要的权限,以创建表,你可能想使用SECURITY DEFINER功能,使其拥有与必要的权限另一个角色。这个版本足够安全。

解决方法

在 MySQL 脚本中,您可以编写:

CREATE TABLE IF NOT EXISTS foo ...;

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
CREATE TABLE IF NOT EXISTS foo ...;

笔记:

在 MySQL 脚本中,您可以编写:

… 其他的东西 …

然后您可以多次运行脚本而无需重新创建表。

你如何在 PostgreSQL 中做到这一点?

笔记:

SQLServer 2022/1/1 18:52:45 有299人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶