tablas primary funciona desde datos crear consultas consola como cero aprender anidadas sql database postgresql

primary - crear tablas en postgresql pgadmin



Postgresql: ¿cómo crear tablas solo si aún no existe? (10)

En Postgresql, ¿cómo puedo hacer una condición para crear una tabla solo si aún no existe?

Ejemplo de código apreciado.


Simplemente crea la tabla y no te preocupes si existe. Si no existe, se creará; si existe, la tabla no se modificará. Siempre puede verificar el valor de retorno de su consulta SQL para ver si la tabla existió o no cuando usted ejecutó la declaración de creación.


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();


Esta es una vieja pregunta. Solo estoy trayendo de vuelta para sugerir otra respuesta. Nota: ya existen otras respuestas mejores, esto solo con fines educativos .

La forma más fácil es hacer lo que otros han dicho; realice la CREATE TABLE si desea conservar los datos existentes, o realice una DROP IF EXISTS y luego una CREATE TABLE, si desea una tabla recién creada.

Otra alternativa es consultar la tabla del sistema para su existencia y proceder desde allí.

SELECT true FROM pg_tables WHERE tablename = <table> [AND schemaname = <schema>];

En uso:

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

Si coincide, tendrá un valor verdadero; de lo contrario, debería devolver un conjunto de datos vacío. Puede usar ese valor para determinar si necesita realizar una CREATE TABLE.


Lo que solía verificar era si existía una tabla (Java y PostgreSQL) antes de crearla. Espero que esto ayude a alguien. La parte Crear tabla no está implementada aquí, solo la comprobación para ver si ya existe una tabla. Pase una conexión a la base de datos y al tableName y debe devolver si la tabla existe o no.

public boolean SQLTableExists(Connection connection, String tableName) { boolean exists = false; try { Statement stmt = connection.createStatement(); String sqlText = "SELECT tables.table_name FROM information_schema.tables WHERE table_name = ''" + tableName + "''"; ResultSet rs = stmt.executeQuery(sqlText); if (rs != null) { while (rs.next()) { if (rs.getString(1).equalsIgnoreCase(tableName)) { System.out.println("Table: " + tableName + " already exists!"); exists = true; } else { System.out.println("Table: " + tableName + " does not appear to exist."); exists = false; } } } } catch (SQLException sqlex) { sqlex.printStackTrace(); } return exists; }


La respuesta más fácil es:

catch{ #create table here }

Esto crea una tabla si no existe y produce un error si existe. Y el error es atrapado


La mejor respuesta ha sido dada por Skalli si estás ejecutando Postgresql 9.1+.

Si, como yo, necesitas hacer eso con Postgresql 8.4, puedes usar una función con una captura de excepción ''duplicate_table''.

Esto ignorará el error generado cuando exista la tabla y seguirá generando otros errores.

Aquí hay un ejemplo trabajando en Postgresql 8.4.10:

CREATE FUNCTION create_table() RETURNS VOID AS $$ BEGIN CREATE TABLE my_table_name(my_column INT); EXCEPTION WHEN duplicate_table THEN -- Do nothing END; $$ LANGUAGE plpgsql;



Creo que para comprobar la tabla pg_class quizás te ayude, algo así:

SELECT COUNT (relname) as a FROM pg_class WHERE relname = ''mytable'' if a = 0 then (CREATE IT)

Saludos.


No estoy seguro de cuándo se agregó, pero para completar, me gustaría señalar que en la versión 9.1 (quizás antes) IF NOT EXISTS utilizar IF NOT EXISTS . IF NOT EXISTS solo creará la tabla si aún no existe.

Ejemplo:

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

Esto creará una tabla llamada vip en los users esquema si la tabla no existe.

Fuente


Intenta ejecutar una consulta en la mesa. Si arroja una excepción, capture la excepción y cree una nueva tabla.

try { int a = db.queryForInt("SELECT COUNT(*) FROM USERS;"); } catch (Exception e) { System.out.print(e.toString()); db.update("CREATE TABLE USERS (" + "id SERIAL," + "PRIMARY KEY(id)," + "name varchar(30) NOT NULL," + "email varchar(30) NOT NULL," + "username varchar(30) NOT NULL," + "password varchar(30) NOT NULL" + ");"); } return db;