jueves, julio 31, 2008

PostgreSQL vs Firebird

http://www.amsoftwaredesign.com/pg_vs_fb



PostgreSQL vs Firebird feature comparison (for Enterprise Use)

Feature PostgreSQL 8.2.x
Firebird 2.0.x
MVCC Yes Yes
Row level Locking Available Yes Yes
Max Database Size Unlimited* Unlimited*
Max table Size 32 TB ~32 TB
Max Row Size 1.6 TB 64 KB
Max Field Size 1 GB
Max size for all types including blobs
Firebird seems to be a better choice if you need huge blob support.
Depends on Type
(Varchar max size is 32k, Max Blob Size is 32GB)
Max Rows per Table Unlimited* > 16 Billion
Max Columns Per Table 50 - 1600 depending on column types Depends on data types used.
Max Indexes Per Table Unlimited* 65,535
Multi Threaded Architecture Available? No Yes (super server)
Ability to re-order table columns without re-creating from a temp table. No Yes
Stores Transaction Information in same file as data No Yes
Auto Increment Columns Yes
(serial type that uses sequences)
Yes
(must use a generator and a trigger)
True Boolean column type Yes No
Table Inheritance Yes No
Domains Yes Yes
Table Partitioning Yes (basic) No
Updateable Views Yes (via rules system) Yes
Event/Notification System Yes Yes
Temporary Tables Yes No
Rich Built in Functions Yes No
Multi Lang Stored Procedures Yes (PLPGSQL,PLPerl,PlJava etc) No
Compiled External Function (UDF) Support Yes (C,C++, Delphi possible but C headers would have to be ported) Yes (C,C++,Delphi)
Exception handling in stored procedures Yes Yes
2 Phased Commit Yes Yes
Native SSL support Yes No
Multiple authentication methods
(i.e. LDAP)
Yes No
Compound Indexes Yes Yes
Unique Indexes Yes Yes
Partial Indexes Yes Yes
Functional Indexes Yes Yes
Multiple Index Storage Types Yes (btree,hash etc) No
Point in Time Recovery Yes No
Schema Support Yes No
Strongly conforms to ANSI-SQL 92/99 Yes Yes
Limit/Offset support Yes Yes (FIRST/SKIP)
Create user defined types Yes No
Create user defined operators Yes No
Create user defined Aggregates Yes No
Log Shipping Yes No
Write ahead logging
(Important for Point In Time Recovery and Log Shipping)
Yes No
Tablespaces Yes No
Save Points Yes Yes
Open Source Async Replication Yes
(Slony )
No
(Commercial solutions available. Database shadowing is also present.)
Online/Hot Backups Yes Yes
File System based backups possible Yes
(Postmaster must be stopped)

Yes
Require backup/restore to compact (not just reuse space, but shrink the physical size of the DB) No Yes
Fully ACID Compliant Yes Yes
Native Win32 Port Yes
(only runs on NTFS files systems)
Yes
Text/Memo field type
(Having a type of TEXT or MEMO aids in porting from other databases and in maintaining a abstraction layer)
Yes

Yes
(Can store text via BLOB Type 1 While FB can store text it is not referenced in DDL as TEXT or MEMO rather BLOB subtype 1. Can also use a domain to alias blob subtype 1 as TEXT or MEMO. Domain alias must be created by user.)

BLOB support Yes
(limited to the max field size of 1 GB)
Yes
(Can be up to 32GB)
UTF8 support Yes Yes
Define charactersets/collations per database (default) Yes
(PostgreSQL can also define a characterset for the entire database cluster during the initdb process)
Yes
Define charactersets and collations on a per column level No Yes
Foreign Keys Yes Yes
Check Constraints Yes Yes
Unique Constraints Yes Yes
Not Null Constraints Yes Yes
Multiple Transaction Isolation levels Yes Yes
Fully relational System Catalogs Yes Yes
Information Schema Yes No (no schema support)
Native GIS support via GIST or other native means Yes (PostGIS ) No
Open Source Full Text Search (Official part of Project) Yes No
Use POSIX Regular Expressions in queries Yes No
Database Monitoring Yes
(Supports among other things statement logging at server via config setting. Aids in debugging of client applications)
?
Ability to query databases on other servers local or remote. Yes (Dblink ) No
Ability to query foreign databases (MS SQL Server, Oracle etc) Yes (DBI-Link ,DBLink-TDS ) No
Read Only Databases No Yes
Regular Version Updates Yes
Major release once per year with frequent minor updates.
No
(Often several years between major versions) Minor updates are more frequent. Project is active.

viernes, julio 04, 2008

Estándares y Mocosoft

Recientemente he tenido que hacer un programa que entre otras cosas recogía y enviaba ficheros por FTP (programa en BOO sobre .net)


Tuve un problema cuando pedía la lista de ficheros (comando NLST) y el directorio no tenía ficheros

Me devolvía un error, pero no siempre


Miro y... código de error 550 que pueden ser diferentes cosas. Descripción del error "No files found" que es una de las posibles razones del error 550

Pero esto para mi era un problema

550 no es que no haya ficheros, también puede ser que no tengas permiso, por ejemplo

Pero yo quería saber si no había ficheros o no hay permisos o qué exactamente


Y no sirve con leer la descipción, porque es eso sólo una descripción.
No hay garantías que entre diferentes sistemas tengas la misma descripción en los mismos casos.
En ocasiones puedes tener más detalle y en otras menos



Pos vaya rollo lo del protocolo FTP...

O no, mejor mirar en el RFC de FTP (documento donde se especifica cómo debe trabajar)

Sorpresa 1.
A una petición de NLST no se le puede devolver un código de erorr 550 NUNCA ¿¿??


Probemos contra un servidor Linux a ver que dice al pedir la lista de un directorio vacío...


No devuelve código de error y de vuelve... en blanco, nada


Vaya, pues así me gusta más y además sigue es estándar


En ocasiones los estándares no son completos y pueden tener ambigüedades.
En otras ocasiones, el estándar tomó una decisión incorrecta

En estos casos, puede estar justificado hacer tu interpretación o mejora
(aunque con mucha cautela)


Pero nos encontramos con un caso en el que...


Mocosoft no sigue el estándar.
El estándar era claro y completo
La mejor solución era la del estándar


¿Porqué mocosoft lo hizo de otra forma?


No le encuentro ninguna razón que no sea perversa