Esta solución es algo similar a la respuesta de Erwin Brandstetter, pero utiliza solo el lenguaje sql.
No todas las instalaciones de PostgreSQL tienen el lenguaje plpqsql por defecto, esto significa que debe llamar al CREATE LANGUAGE plpgsql
antes de crear la función y luego eliminar el idioma nuevamente para dejar la base de datos en el mismo estado que estaba antes (pero solo si la base de datos no tenía el lenguaje plpgsql para empezar). ¿Ves cómo crece la complejidad?
Agregar plpgsql puede no ser un problema si está ejecutando el script localmente; sin embargo, si el script se usa para configurar un esquema en un cliente, puede no ser conveniente dejar cambios como este en la base de datos de clientes.
Esta solución está inspirada en a post by Andreas Scherbaum.
-- Function which creates table
CREATE OR REPLACE FUNCTION create_table() RETURNS TEXT AS $$
CREATE TABLE table_name (
i int
);
SELECT 'extended_recycle_bin created'::TEXT;
$$
LANGUAGE 'sql';
-- Test if table exists, and if not create it
SELECT CASE WHEN (SELECT true::BOOLEAN
FROM pg_catalog.pg_tables
WHERE schemaname = 'public'
AND tablename = 'table_name'
) THEN (SELECT 'success'::TEXT)
ELSE (SELECT create_table())
END;
-- Drop function
DROP FUNCTION create_table();
@ErwinBrandstetter: Esto podría estar reviviendo un hilo muy antiguo sin propósito, pero el enlace que proporcionó apunta a esta misma página. –