MySQL  

Speed, Power and Precision
 
Company | Products | Support | Documentation | News | Training | Portals | Downloads
Quick links: sitemap | search | jobs | order | mailing lists

Comparision (crash-me)


Database comparison table generated with crash-me for PostgreSQL

This page listing the features of PostgreSQL is a slightly edited report generated by crash-me, which can be obtained from the MySQL 3.23 distribution at http://www.mysql.com/.

crash-me is a program that automatically detects limits and capabilities in a SQL server. MySQL AB has worked very hard to make crash-me as fair and accurate as possible, but there is always a small possibility that some particular tests fails for some database, even if the database has the capability. We are always willing to correct this as soon as this comes to our attention. Some tests may fail because the database in questions does not follow ANSI SQL 92 or ODBC 3.0 but in this case we regard this as a failure in the database.

MySQL AB is trying to add as much tests to the crash-me program as they can but it's always possible that some database vendor specific functions / queries aren't tested. If you find some entries not tested on a database please let us know and try to patch the crash-me program your self or give us some example queries so we can add those entries. We are always open for suggestions for adding things to the crash-me program. The crash-me program is also our input reference for the MySQL benchmark program.

Note: The crash-me table is generated from databases started with default parameters. If this is not the case, this is noted in the comment row. Some detected limits may also be configurable, OS dependent, depend of the Perl DBI driver or depending on the license of the used database version.

 

The following markers are used in the comparison table
MarkerDescription
yes Function is supported
no Function is not supported
error Function exists but didn't return expected result. This usually means that the database is using some non standard extension for the option in question
ignoredFunction doesn't give an error from the server but it doesn't do anything. One can probably do the same action with some other command
nonstandardFunction exists but doesn't work according to ANSI SQL 92 or ODBC 3.0
 Not relevant or not tested with the database
+numberAt least number operations is supported
warning Anyone with normal access to the database server can take it down, possibly forever!

The crash-me comparisons

Function PostgreSQL version 7.1.1
Crash-me information
crash me safeyes
crash me version1.57
crash-me tested onLinux 2.4.0-64GB-SMP i686
ANSI SQL 92 types
PostgreSQL
Type bityes
Type bit(1 arg)yes
Type bit varying(1 arg)yes
Type booleanyes
Type char(1 arg)yes
Type char varying(1 arg)yes
Type character(1 arg)yes
Type character varying(1 arg)yes
Type dateyes
Type dec(2 arg)yes
Type decimal(2 arg)yes
Type double precisionyes
Type floatyes
Type float(1 arg)yes
Type intyes
Type integeryes
Type interval dayyes
Type interval day to houryes
Type interval day to minuteyes
Type interval day to secondyes
Type interval houryes
Type interval hour to minuteyes
Type interval hour to secondyes
Type interval minuteyes
Type interval minute to secondyes
Type interval monthyes
Type interval secondyes
Type interval yearyes
Type interval year to monthyes
Type national char varying(1 arg)yes
Type national character(1 arg)yes
Type national character varying(1 arg)yes
Type nchar(1 arg)yes
Type nchar varying(1 arg)yes
Type numeric(2 arg)yes
Type realyes
Type smallintyes
Type timeyes
Type timestampyes
Type timestamp with time zoneyes
Type varchar(1 arg)yes
ODBC 3.0 types
PostgreSQL
Type bigintyes
Type binary(1 arg)no
Type datetimeyes
Type tinyintno
Type varbinary(1 arg)no
Other types
PostgreSQL
Type abstimeyes
Type bfileno
Type blobno
Type boolyes
Type boxyes
Type byteno
Type char(1 arg) binaryno
Type cidryes
Type circleyes
Type clobno
Type datetimeyes
Type doubleno
Type enum(1 arg)no
Type float(2 arg)no
Type float4yes
Type float8yes
Type imageno
Type inetyes
Type int(1 arg) zerofillno
Type int1no
Type int2yes
Type int3no
Type int4yes
Type int8yes
Type int not null auto_incrementno
Type int not null identityno
Type int unsignedno
Type intervalyes
Type lineyes
Type longno
Type long rawno
Type long varbinaryno
Type long varchar(1 arg)no
Type lsegyes
Type macaddryes
Type mediumintno
Type mediumtextno
Type middleintno
Type mlslabelno
Type moneyyes
Type nclobno
Type numberno
Type number(1 arg)no
Type number(2 arg)no
Type nvarchar2(1 arg)no
Type pathyes
Type pointyes
Type polygonyes
Type raw(1 arg)no
Type reltimeyes
Type rowidno
Type serialyes
Type set(1 arg)no
Type smalldatetimeno
Type smallfloatno
Type smallmoneyno
Type textyes
Type text(1 arg)no
Type timespanyes
Type uintno
Type varchar2(1 arg)no
Type yearno
Constraints and type modifiers
PostgreSQL
Column constraintsyes
Table constraintsyes
NULL constraint (SyBase style)yes
default value for columnyes
default value function for columnyes
foreign keysyes
foreign key syntaxyes
Function MATCH UNIQUEno
Function NOT UNIQUEno
Function UNIQUEno
null in unique indexyes
Tables without primary keyyes
null in unique indexyes
null combination in unique indexyes
primary key in create tableyes
unique in create tableyes
unique null in createyes
ANSI SQL 92 functions
PostgreSQL
Function +, -, * and /yes
Function BIT_LENGTHno
Function CASTyes
Function CHAR_LENGTHyes
Function CHAR_LENGTH(constant)yes
Function CHARACTER_LENGTHyes
Function COALESCEyes
Function concatenation with ||yes
Function CURRENT_DATEyes
Function CURRENT_TIMEyes
Function CURRENT_TIMESTAMPyes
Function CURRENT_USERyes
Function EXTRACTyes
Function LOCALTIMEno
Function LOCALTIMESTAMPno
Function LOWERyes
Function NULLIF with numbersyes
Function NULLIF with stringsyes
Function OCTET_LENGTHyes
Function POSITIONyes
Function searched CASEyes
Function SESSION_USERyes
Function simple CASEyes
Function ANSI SQL SUBSTRINGyes
Function SYSTEM_USERno
Function TRIMyes
Function UPPERyes
Function USERyes
ODBC 3.0 functions
PostgreSQL
Function ABSyes
Function ACOSyes
Function ASCIIyes
Function ASINyes
Function ATANyes
Function ATAN2yes
Function CEILINGno
Function CHARno
Function CONCAT(2 arg)no
Function COSyes
Function COTyes
Function CURDATEno
Function CURTIMEno
Function DATABASEno
Function DAYNAMEno
Function DAYOFMONTHno
Function DAYOFWEEKno
Function DAYOFYEARno
Function DEGREESyes
Function DIFFERENCE()no
Function EXPyes
Function FLOORyes
Function ODBC syntax LEFT & RIGHTno
Function HOURno
Function ANSI HOURno
Function IFNULLno
Function INSERTno
Function LCASEno
Function LEFTno
Function REAL LENGTHyes
Function ODBC LENGTHno
Function LOCATE(2 arg)no
Function LOCATE(3 arg)no
Function LOGno
Function LOG10no
Function LTRIMyes
Function MINUTEno
Function MODyes
Function MONTHno
Function MONTHNAMEno
Function NOWyes
Function PIyes
Function POWERno
Function QUARTERno
Function RADIANSyes
Function RANDno
Function REPEATyes
Function REPLACEno
Function RIGHTno
Function ROUND(2 arg)yes
Function RTRIMyes
Function SECONDno
Function SIGNyes
Function SINyes
Function SOUNDEXno
Function SPACEno
Function SQRTno
Function ODBC SUBSTRINGyes
Function TANyes
Function TIMESTAMPADDno
Function TIMESTAMPDIFFno
Function TRUNCATEno
Function UCASEno
Function USER()no
Function WEEKno
Function YEARno
Other functions
PostgreSQL
Function NOT as '!' in SELECTno
Function MOD as %yes
Function & (bitwise and)yes
Function AND as '&&'no
Function <> in SELECTyes
Function =yes
Function ADD_MONTHSno
Function AND and OR in SELECTyes
Function ASCII_CHARno
Function ASCII_CODEno
Function ATN2no
Function automatic num->string convertno
Function automatic string->num convertyes
Function BETWEEN in SELECTyes
Function << and >> (bitwise shifts)yes
Function BIT_COUNTno
Function CEILyes
Function CHARINDEXno
Function CHRyes
Function concatenation with +error
Function CONCAT(list)no
Function CONVERTno
Function COSHno
Function DATE_FORMATno
Function DATEADDno
Function DATEDIFFno
Function DATENAMEno
Function DATEPARTno
Function ELTno
Function ENCRYPTno
Function FIELDno
Function FORMATno
Function FROM_DAYSno
Function FROM_UNIXTIMEno
Function GETDATEno
Function GREATESTno
Function IFno
Function IN on numbers in SELECTyes
Function IN on strings in SELECTyes
Function INITCAPyes
Function LOCATE as INSTRno
Function INSTR (Oracle syntax)no
Function INSTRBno
Function INTERVALno
Function LAST_DAYno
Function LAST_INSERT_IDno
Function LEASTno
Function LENGTHBno
Function LIKE in SELECTyes
Function LIKE ESCAPE in SELECTyes
Function LNno
Function LOG(m,n)yes
Function LOGNno
Function LPADyes
Function MDYno
Function SUBSTRING as MIDno
Function MONTHS_BETWEENno
Function NOT in SELECTyes
Function NOT BETWEEN in SELECTyes
Function NOT LIKE in SELECTyes
Function ODBC CONVERTno
Function PASSWORDno
Function PASTEno
Function PATINDEXno
Function PERIOD_ADDno
Function PERIOD_DIFFno
Function POWno
Function RANGEno
Function REGEXP in SELECTno
Function REPLICATEno
Function REVERSEno
Function ROOTno
Function ROUND(1 arg)yes
Function RPADyes
Function SEC_TO_TIMEno
Function SINHno
Function STRno
Function STRCMPno
Function STUFFno
Function SUBSTRBno
Function SUBSTRING_INDEXno
Function SYSDATEno
Function TAILno
Function TANHno
Function TIME_TO_SECno
Function TO_DAYSno
Function TRANSLATEyes
Function TRIM; Many char extensionyes
Function TRIM; Substring extensionerror
Function TRUNCyes
Function UIDno
Function UNIX_TIMESTAMPno
Function USERENVno
Function VERSIONyes
Function WEEKDAYno
Function | (bitwise or)yes
Function OR as '||'no
Function ~* (case insensitive compare)yes
Functions in WHERE
PostgreSQL
Function BETWEENyes
Function = ALLyes
Function = ANYyes
Function = SOMEyes
Function EXISTSyes
Function IN on numbersyes
Function LIKEyes
Function LIKE ESCAPEyes
Function MATCHno
Function MATCHESno
Function NOT BETWEENyes
Function NOT EXISTSyes
Function NOT LIKEyes
ANSI SQL 92 group functions
PostgreSQL
Group function ANYno
Group function AVGyes
Group function COUNT (*)yes
Group function COUNT column nameyes
Group function COUNT(DISTINCT expr)yes
Group function EVERYno
Group function MAX on numbersyes
Group function MAX on stringsyes
Group function MIN on numbersyes
Group function MIN on stringsyes
Group function SOMEno
Group function SUMyes
Other group functions
PostgreSQL
Group function BIT_ANDno
Group function BIT_ORno
Group function COUNT(DISTINCT expr,expr,...)no
Group function STDno
Group function STDDEVyes
Group function VARIANCEyes
Function use
PostgreSQL
update of column= -columnyes
column LIKE columnyes
LIKE on numbersyes
Calculate 1--1no
Is 'a' || NULL = NULLyes
Is 1+NULL = NULLyes
Order by and group by
PostgreSQL
number of columns in group by+64
number of columns in order by+64
Group byyes
Group by aliasyes
Group on column with null valuesyes
Group by positionyes
Group on unused columnyes
Havingyes
Having on aliasno
Having with group functionyes
Order byyes
Order by aliasyes
Order by functionyes
Order by positionyes
Order by DESC is rememberedno
Order by on unused columnyes
Join methods
PostgreSQL
cross join (same as from a,b)yes
full outer joinyes
inner joinyes
tables in join+64
left outer joinyes
left outer join usingyes
DELETE FROM table1,table2...no
Update with many tablesno
natural joinyes
natural join (incompatible lists)yes
natural left outer joinyes
left outer join odbc styleno
recursive subqueries+64
right outer joinyes
Update with sub selectyes
ANSI SQL simple joinsyes
subqueriesyes
String handling
PostgreSQL
binary strings (b'0110')yes
Case insensitive compareno
String functions on date columnsyes
Double '' as ' in stringsyes
hex strings (x'1ace')yes
Ignore end space in compareyes
insert empty stringyes
Multiple line stringsyes
Allows ' and " as string markersno
Remembers end space in char()no
Remembers end space in varchar()yes
return string size from function+8000000
Select constantsyes
constant string size in SELECT16777207
constant string size in where16777181
Quoting
PostgreSQL
" as identifier quote (ANSI SQL)no
[] as identifier quoteno
` as identifier quoteno
Name limits
PostgreSQL
different namespace for indexno
column name length+512
index name length+512
select alias name length+512
table alias name length+512
table name length+512
rename tableno
case independent table namesyes
Index limits
PostgreSQL
Alter table add primary keyno
Alter table add uniqueno
Alter table drop primary keyno
Alter table drop uniqueno
create indexyes
drop indexyes
index in create tableno
index on column part (extension)no
max index+64
index length+8192
max index part length235328
index parts16
index varchar part length235328
unique indexes+64
null in indexyes
Type limits
PostgreSQL
char are space filledyes
Supports 'infinity datesno
Supports 9999-12-31 datesyes
Supports 0001-01-01 datesyes
Supports YY-MM-DD 2000 compilant datesyes
Supports 0000-00-00 datesno
No need to cast from integer to floatno
mixing of integer and float in expressionyes
max char() size+8000000
max text or blob size+8000000
max varchar() size+8000000
Storage of float valuesround
Expressions
PostgreSQL
Need to cast NULL for arithmeticno
binary numbers (0b1001)no
TRUE and FALSEyes
hex numbers (0x41)no
Value of logical operation (1=1)1
big expressions10
OR and AND in WHERE19994
simple expressions9999
stacked expressions+2000
LIMIT number of rowswith LIMIT
SELECT with LIMIT #,#yes
Comments
PostgreSQL
# as commentno
-- as comment (ANSI)yes
/* */ as commentyes
// as commentno
ALTER TABLE
PostgreSQL
Alter table add columnyes
Alter table add constraintyes
Alter table add foreign keyno
Alter table add many columnsno
Alter table alter column defaultyes
Alter table change columnno
Alter table drop columnno
Alter table drop constraintno
Alter table drop foreign keyno
Alter table modify columnno
Alter table rename tableyes
CREATE and DROP
PostgreSQL
Automatic row idno
create table if not existsno
Create SCHEMAno
create table from selectwith AS
Domains (ANSI SQL)no
drop table if existsno
drop table require cascade/restrictno
drop table with cascade/restrictno
many tables to drop tableyes
Type for row idoid
temporary tablesyes
truncateyes
SELECT
PostgreSQL
Column aliasyes
Computeno
insert INTO ... SELECT ...yes
SELECT without FROMyes
Table aliasyes
Select table_name.*yes
Sets
PostgreSQL
exceptyes
except allyes
except all (incompatible lists)no
except (incompatible lists)no
intersectyes
intersect allyes
intersect all (incompatible lists)no
intersect (incompatible lists)no
minusno
minus (incompatible lists)no
unionyes
union allyes
union all (incompatible lists)yes
union (incompatible lists)yes
INSERT
PostgreSQL
INSERT with Value listsno
INSERT with set syntaxno
Other features
PostgreSQL
atomic updatesno
allows end ';'yes
lock tableyes
PSM modules (ANSI SQL)no
PSM procedures (ANSI SQL)no
Triggers (ANSI SQL)no
transactionsyes
viewsyes
Other limits
PostgreSQL
Simultaneous connections (installation default)32
Columns in table1600
max table row length (without blobs)64519
table row length with nulls (without blobs)64519
query size16777216

This information is provided by MySQL AB so one can get the real limitations from the database server (not the information from sales managers!). Hopefully the above information will make it easier for you to find a database server that has the functionality you need and that you can rely on!

MySQL AB will continue to extend crash-me and add more database servers to the above chart. We are also very interested in new tests so if you have any suggestions, please mail us (or even better, send us code).

We are also working on the MySQL benchmark to help users see how fast a database is when doing different typical things.

==============================================

You can direct questions about crash-me and the benchmark to the MySQL mailing list.
sitemap | search | jobs | order | mailing lists
© 1995-2001 MySQL AB