Часть SQL «запроса» (обычно называемая DML - язык манипулирования данными) достаточно стандартизирована, и запросы, написанные в одной базе данных, часто выполняются в другой базе данных, если не используются функции «расширения поставщика». Части SQL «создания битов базы данных» (часто называемые DDL - язык определения данных) не стандартизированы, и каждая база данных делает это немного по-своему. Итак, как вы обнаружили, операторы типа CREATE TABLE, написанные для одной базы данных, не будут работать без некоторой настройки другой базы данных.
<soapbox>
На мой взгляд, это хорошо. DDL эффективно определяет, что может быть создано в базе данных. Если все поставщики используют точно один и тот же DDL, то все продукты будут точно одинаковыми с точки зрения функций, которые они поддерживают. Например, чтобы разрешить наследование таблиц в PostgreSQL, должен быть какой-то способ определить, как одна таблица наследуется от другой, и это определение должно быть частью определения таблицы, либо как часть оператора CREATE TABLE, либо в некоторых другой способ, но это должен быть оператор DDL. Таким образом, по чисто функциональным причинам (поскольку PostgreSQL поддерживает функцию, которую не поддерживает большинство баз данных) DDL в PostgreSQL должен отличаться от других баз данных. Аналогичная ситуация возникает в MySQL, поскольку она позволяет использовать разные механизмы ISAM с разными возможностями. Подобные ситуации возникают в Oracle ... и в SQL Server ... и <your favorite database here>
.
Стандарты - это палка о двух концах. С одной стороны, это отличная вещь, потому что они предоставляют «стандартный» способ сделать что-то. С другой стороны, это ужасная вещь, потому что сама цель стандарта состоит в том, чтобы предоставить «стандартный» способ что-то делать, то есть еще один способ сказать «создать стагнацию и подавить инновации».
</soapbox>
Делись и наслаждайся.