PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL utwórz tabelę, jeśli nie istnieje

Ta funkcja została zaimplementowana w Postgres 9.1 :

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

Dla starszych wersji , oto funkcja do obejścia tego:

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

Zadzwoń:

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

Uwagi:

  • Kolumny schemaname i tablename w pg_tables rozróżniana jest wielkość liter. Jeśli umieścisz identyfikatory w cudzysłowie w CREATE TABLE oświadczenie, musisz użyć dokładnie tej samej pisowni. Jeśli nie, musisz użyć ciągów pisanych małymi literami. Zobacz:

  • Czy w nazwach kolumn PostgreSQL jest rozróżniana wielkość liter?

  • pg_tables zawiera tylko rzeczywiste tabele . Identyfikator może nadal być zajęty przez powiązane obiekty. Zobacz:

  • Jak sprawdzić, czy tabela istnieje w danym schemacie

  • Jeśli rola wykonuje ta funkcja nie ma niezbędnych uprawnień do tworzenia tabeli, której możesz chcieć użyć SECURITY DEFINER dla funkcji i uczynić ją właścicielem przez inną rolę z niezbędnymi uprawnieniami. Ta wersja jest wystarczająco bezpieczna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak napisać DataFrame do tabeli postgres?

  2. Wyrażenie regularne znajdź i zamień w Postgres

  3. Gdzie warunek dla połączonego stołu w Sequelize ORM

  4. Jak utworzyć użytkownika z uprawnieniami superużytkownika w PostgreSQL?

  5. Dlaczego nie mogę używać aliasów kolumn w następnym wyrażeniu SELECT?