PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL създаде таблица, ако не съществува

Тази функция е внедрена в Postgres 9.1 :

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

За по-стари версии , ето функция за заобикаляне:

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$;

Обадете се:

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

Бележки:

  • Колоните schemaname и tablename в pg_tables са чувствителни към главни букви. Ако цитирате идентификатори в двойни кавички в CREATE TABLE изявление, трябва да използвате точно същия правопис. Ако не го направите, трябва да използвате низове с малки букви. Вижте:

  • Имената на колоните в PostgreSQL са чувствителни към главни букви?

  • pg_tables съдържа само действителни таблици . Идентификаторът все още може да бъде зает от свързани обекти. Вижте:

  • Как да проверите дали таблица съществува в дадена схема

  • Ако ролята изпълни тази функция няма необходимите привилегии за създаване на таблицата, която може да искате да използвате SECURITY DEFINER за функцията и я направете собствена от друга роля с необходимите привилегии. Тази версия е достатъчно безопасна.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Низ -> java.util.Date -> java.sql.Date (с времеви печат)

  2. [Видео] Въведение в типовете данни JSON в PostgreSQL

  3. Преминаване от MySQL към PostgreSQL – съвети, трикове и проблеми?

  4. Шаблони и модификатори за числово форматиране в PostgreSQL

  5. Прозоречна функция на Postgres и групиране по изключение