Это решение несколько похоже на ответ Эрвина Брандстретера, но использует только язык sql.
Не все установки PostgreSQL имеют язык plpqsql по умолчанию, это означает, что вам нужно будет позвонить CREATE LANGUAGE plpgsql
перед созданием функции, а затем снова удалить язык, чтобы оставить базу данных в том же состоянии, что и раньше (но только если у базы данных не было языка plpgsql для начала). Посмотрите, как растет сложность?
Добавление plpgsql может не возникнуть, если вы используете локальный скрипт, однако, если скрипт используется для настройки схемы у клиента, может быть нежелательно оставлять такие изменения в базе данных клиентов.
Это решение вдохновлено 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: Это может привести к возобновлению очень старого потока без какой-либо цели, но ссылка, которую вы указали, указывает на эту же страницу. –