在 MySQL 中,可以通过使用如下特定的注释语法在通用/标准 SQL 中包含 MySQL 特定的 SQL 语句:
INSERT /*! DELAYED */ INTO foo VALUES (1, 2, 3);
这在 http://dev.mysql.com/doc/refman/5.1/en/comments.html 中有描述.
是否有任何等效的语法或 hack 可以与 PostgreSQL 一起使用以将 PostgreSQL 特定的语句嵌入同一文件中?
我想让我的应用程序在两个平台上都可移植,但在某些情况下,我找不到通用的做事方式,需要做特定于数据库的事情。例如,在这些数据库引擎上,在表中放置一个自动递增的列是完全不同的,但数据库模式的大多数其他部分完全相同并且可以共享。因此,我宁愿在分发中只包含一个 create-the-database.sql 文件,因为它更容易维护并且感觉更整洁。
最佳答案
接受并创建一个“postgresql.sql”文件和一个“mysql.sql”文件。这需要很少的努力。您可以老派使用 cpp(1),这样两个模式都在同一个文件中,甚至交错。
% cat foo.sql
#ifdef USE_POSTGRESQL
CREATE TABLE pg_epicness (
-- PostgreSQL schema def
);
#elif USE_MYSQL
CREATE TABLE phail (
-- idontcareaboutmyusers schema def
);
#endif
% cat foo.sql | cpp -DUSE_POSTGRESQL | grep -v ^# > postgresql.sql
% cat foo.sql | cpp -DUSE_MYSQL | grep -v ^# > mysql.sql
不漂亮,但正如您所说,您正在寻找黑客。由于无论如何在您的 .sql 文件中都不应该有任何前导磅字符,因此它是“安全的”。
关于sql - 如何在可移植 SQL 中包含特定于 PostgreSQL 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6900723/