I hear database agnosticism treated as some great good. Your application needs a database, but is built to run on "any" relational database -- generally treating it as little more than dumb storage. The SQL standard provides a sort of common language for nearly all database products, and the vendors' insistence on touting their SQL standard compliance gives this idea more credibility. Yet in practice, database products must differentiate -- after all, they're competing products. Extra features, language quirks, performance choices, all of these determine how a given product is actually used. To make your application truly database agnostic requires you to use the absolute minimum standard applicable to all of these products. You wind up wasting most of their potential.
Let's start with a car analogy. All cars have four wheels, some sort of engine, a steering wheel, etc. To be car-agnostic, in the manner one would be database-agnostic, you would need to ignore the back seats, the trunk, the roof, the trailer hitch, the radio, the glove box, the turning radius, braking, and acceleration abilities of the car. These are not luxuries. They're natural variations in similar products. But that's the level of standardization SQL provides. You run to the store, and find yourself holding all of your groceries in your lap on the way home because you can't assume you'll have a trunk to pile them all into. It's ridiculous! The car salesman told you his car was just like any other car, that you would know how to drive it -- and you took it to mean that you should only use the absolute bare minimum parts of the car.
It's highly unlikely you're even doing it correctly. Unless you're fully testing your product with a whole range of database software, all the time, you've probably strayed from the minimum standard and will only find out when a customer asks that your software work with their existing install of XYZ. It's very difficult to keep yourself inside strict limits when the environment you're in doesn't restrict you. None of these products will tell you that they know what you mean, but you really shouldn't say it that way because some other product might not get it. They'll just do your bidding, and you'll be none of the wiser. By the time you realize what you've done, you'll already be too dependent on the existing solution to change without large expenditures, yet you'll have spent all this time refusing to use any of the features that could have reduced your costs. You lose either way.
So please. Be a power user. Pick a product for what it can do for you, and then go with it. Explore. Open the glove box. Check out the trunk. Tug on that tow-hitch. Turn up the radio. It's okay to use closures and multiple-inheritance and inner classes. It's also okay to use triggers and stored procedures and declarative referential integrity and transactions and constraints and windowing functions and updateable views and derived tables and global temporary tables and context variables and external tables and cross-database queries and custom aggregate functions and database triggers and scheduled jobs and sequences and common table expressions and recursive (connect-by) queries and NULL (yes, some people even try to refuse to use NULL) and calculated (computed-by) fields. (Whew.) Train your fellow programmers. Document your code. Proselytize to your peers. Inform your customers of your requirements; just as you tell them they need to run Windows for your solution to work, tell them what database product they'll need. There will always be integration options in a heterogeneous environment; just because you were kind enough to make your product use the same database platform as the previous vendor doesn't mean the next guy will -- integration will have to happen eventually anyway. Rather than refusing to use or understand your tools, become an expert. It's a lot easier to justify your requirement to use a given database product with neat features it has that you used, than mistakes you made that now leave you unintentionally dependent on it. Your customer will get better software for it, for cheaper. You'll still sell product. It'll be okay.
Now, go read up on the features I listed above, see how they can help you. I've yet to find rare or exclusive features in any programming environment that weren't sometimes really beneficial.