Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
PostgreSQLÔ´Âë½á¹¹
 
  7307  次浏览      29
 2019-9-6
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËPostgreSQLµÄÔ´´úÂ룬˵Ã÷ÁËPostgreSQL 9.1µÄÈ«Ìå½á¹¹£¬»¹ÓÐ˵Ã÷ÁË´úÂëÊ÷,È»ºó»¹Ê¹ÓÃÁ˵÷ÊÔÆ÷À´×·×ÙPostgreSQLµÄ¶¯×÷¡£

PostgreSQLµÄʹÓÃÐÎ̬

PostgreSQL²ÉÓÃC/S(¿Í»§»ú/·þÎñÆ÷)ģʽ½á¹¹¡£Ó¦Óòãͨ¹ýINET»òÕßUnix SocketÀûÓüȶ¨µÄЭÒéÓëÊý¾Ý¿â·þÎñÆ÷½øÐÐͨÐÅ¡£

ÁíÍ⣬»¹ÓÐÒ»ÖÖ¡®Standalone Backend¡¯Ê¹Óõķ½Ê½, ËäȻͨ¹ýÕâÖÖ·½Ê½Ò²¿ÉÒÔÆô¶¯·þÎñÆ÷£¬µ«ÊÇÒ»°ãÖ»ÔÚÊý¾Ý¿âµÄ³õʼ»¯(PostgreSQLµÄclusterµÄ³õʼ»¯£¬Ï൱ÓÚÆäËûÊý¾Ý¿âµÄinstanceµÄ³õʼ»¯)¡¢½ô¼±Î¬»¤µÄʱºòʹÓã¬ËùÒÔ¼òµ¥À´Ëµ¿ÉÒÔÈÏΪPostgreSQLÊÇʹÓÃC/SµÄÐÎʽ½øÐзÃÎʵġ£

PostgreSQL°Ñ¿Í»§¶Ë³ÆÎªÇ°¶Ë(Frontend),°Ñ·þÎñÆ÷¶Ë³ÉΪºó¶Ë(Backend), ºó¶ËÓи´Êý¸ö½ø³Ì¹¹³É£¬Õâ¸öÔÚºóÃæ»á½øÐÐ˵Ã÷¡£

ǰ¶ËºÍºó¶ËͨÐŵÄЭÒéÔÚPostgreSQLµÄ¹Ù·½ÎĵµÖеġ¶Ç°¶ËºÍºó¶ËµÄͨÐÅЭÒé¡·Ò»ÕÂÖÐÓÐÏêϸµÄ˵Ã÷¡£¼òµ¥À´Ëµ£¬´óÌåµÄ¹¤×÷ģʽÊÇ£ºÇ°¶ËÏòºó¶Ë·¢ËͲéѯµÄSQLÎÄ£¬È»ºóºó¶Ëͨ¹ý¸´Êý¸ö±¨Îİѽá¹û·µ»Ø¸øÇ°¶Ë¡£

ÓÉÓÚÐèÒª½øÐÐÁ¬½ÓµÄ³õʼ»¯¡¢´íÎóµÈ¸÷ÖÖ¸÷Ñù´¦Àí£¬PostgreSQLµÄЭÒéµÄ´¦ÀíÒ²ÊÇÏ൱¸´ÔÓ£¬Èç¹ûÒª×Ô¼º´ÓͷʵÏÖÕâЩЭÒéµÄ´¦ÀíµÄ»°£¬»¹ÊÇÏ൱Âé·³µÄ£¬ËùÒÔPostgreSQL±¾ÉíÌṩÁËCÓïÑÔдµÄlibpqÕâÑùÒ»¸öЭÒé´¦Àí¿â£¬ÀûÓÃÕâ¸ö¿â¿ÉÒԱȽÏÇáËɵغͺó¶Ë½øÐÐͨÐÅ¡£PostgreSQLµÄ»°³ýÁËCÒÔÍ⣬»¹Ö§³ÖPerlºÍPHPµÈÆäËûÓïÑÔ£¬ÕâЩÓïÑÔÔÚÄÚ²¿Ò²µ÷ÓÃÁËlibpq.

Ò²Óв»Ê¹ÓÃlibpq¶øÖ±½ÓÓëPostgreSQLͨÐŵĿ⡣±È½Ï¾ßÓдú±íÐÔµÄÊÇJava, PostgreSQLµÄJDBCÇý¶¯ÊDz»ÒÀÀµÓÚlibpqÖ±½ÓÓëPostgreSQLͨÐŵÄ.

ÁíÍâºó¶ËµÄ»°£¬±È½ÏºËÐĵÄÊǽøÐÐÊý¾Ý¿â´¦ÀíµÄÊý¾Ý¿âÒýÇæ(Database Engine)¡£ Êý¾Ý¿âÒýÇæ¿ÉÒÔ¶ÔÓû§Ëù±àдµÄº¯Êý½øÐнâÎöºÍ´¦Àí£¬Óû§Èç¹ûÄܹ»ÀûÓúÃÕâ¸ö¹¦Äܵϰ£¬¿ÉÒÔÈáÈíµØÀ©Õ¹PostgreSQLµÄ¹¦ÄÜ¡£ ±È½Ï¾­³£Ê¹ÓõÄÊÇ´æ´¢¹ý³Ì(PostgreSQLÖгÆÎªÓû§×Ô¶¨Ò庯Êý)£¬PostgreSQLÖ§³ÖµÄÓû§¶¨Ò庯ÊýµÄÓïÑÔÈçÏ£º

ÓïÑÔ ¶ÔÓ¦µÄ×Ô¶¨Ò庯Êý
C Cº¯Êý
SQL SQL º¯Êý
ÀàËÆOracleµÄPL/SQLµÄÓïÑÔ PL/pgSQL
Perl PL/Perl
Python PL/Python

PostgreSQLµÄ»°£¬Óû§¿ÉÒÔ×Ô¶¨ÒåÓïÑÔ´¦ÀíÒýÇæ¡£¸÷ÖÖ·þÎñÆ÷½Å±¾ÓïÑԵĽâÎöÒýÇæ£¬ÒÔµÚÈý·½µÄÐÎʽ´æÔÚ£¬Ö÷ÒªµÄ´¦ÀíÓïÑÔÓÐRuby¡¢JavaÒÔ¼°PHPµÈ¡£

PostgreSQLµÄ½á¹¹

ÕâÀïµÄ»°£¬ÔÙÏêϸ¿´¿´PostgreSQLµÄ½á¹¹¡£ ºó¶ËÓɼ¸¸ö½ø³Ì¹¹³É¡£

Potgres(³£×¤½ø³Ì)

¹ÜÀíºó¶ËµÄ³£×¤½ø³Ì£¬Ò²³ÆÎª¡¯postmaster¡¯¡£ÆäĬÈϼàÌýUNIX Domain SocketºÍTCP/IP£¨WindowsµÈ£¬Ò»²¿·ÖµÄƽֻ̨¼àÌýtcp/ip£©µÄ5432¶Ë¿Ú£¬µÈ´ýÀ´×Ôǰ¶ËµÄµÄÁ¬½Ó´¦Àí¡£¼àÌýµÄ¶Ë¿ÚºÅ¿ÉÒÔÔÚPostgreSQLµÄÉèÖÃÎļþpostgresql.confÀïÃæ¿ÉÒԸġ£

Ò»µ©ÓÐǰ¶ËÁ¬½Ó¹ýÀ´£¬postgres»áͨ¹ýfork(2)Éú³É×Ó½ø³Ì¡£Ã»ÓÐFork(2)µÄwindowsƽ̨µÄ»°£¬ÔòÀûÓÃcreateProcess()Éú³ÉеĽø³Ì¡£ÕâÖÖÇéÐεϰ£¬ºÍfork(2)²»Í¬µÄÊÇ£¬¸¸½ø³ÌµÄÊý¾Ý²»»á±»¼Ì³Ð¹ýÀ´£¬ËùÒÔÐèÒªÀûÓù²ÏíÄÚ´æ°Ñ¸¸½ø³ÌµÄÊý¾Ý¼Ì³Ð¹ýÀ´¡£

Postgres(×Ó½ø³Ì)

×Ó½ø³Ì¸ù¾Ýpg_hba.conf¶¨ÒåµÄ°²È«²ßÂÔÀ´ÅжÏÊÇ·ñÔÊÐí½øÐÐÁ¬½Ó£¬¸ù¾Ý²ßÂÔ£¬»á¾Ü¾øÄ³Ð©Ìض¨µÄIP¼°ÍøÂ磬»òÕßÒ²¿ÉÒÔÖ»ÔÊÐíÄ³Ð©ÌØ¶¨µÄÓû§»òÕß¶ÔijЩÊý¾Ý¿â½øÐÐÁ¬½Ó¡£

Postgres»á½ÓÊÜǰ¶Ë¹ýÀ´µÄ²éѯ£¬È»ºó¶ÔÊý¾Ý¿â½øÐмìË÷£¬×îºÃ°Ñ½á¹û·µ»Ø£¬ÓÐʱҲ»á¶ÔÊý¾Ý¿â½øÐиüС£¸üеÄÊý¾Ýͬʱ»¹»á¼Ç¼ÔÚÊÂÎñÈÕÖ¾ÀïÃæ£¨PostgreSQL³ÆÎªWALÈÕÖ¾£©£¬Õâ¸öÖ÷ÒªÊǵ±Í£µçµÄʱºò£¬·þÎñÆ÷µ±»ú£¬ÖØÐÂÆô¶¯µÄʱºò½øÐлָ´´¦ÀíµÄʱºòʹÓõġ£ÁíÍ⣬°ÑÈÕÖ¾¹éµµ±£´æÆðÀ´£¬¿ÉÔÚÐèÒª½øÐлָ´µÄʱºòʹÓá£ÔÚPostgreSQL 9.0ÒÔºó£¬Í¨¹ý°ÑWALÈÕÖ¾´«ËÍÆäËûµÄpostgreSQL£¬¿ÉÒÔʵʱµÃ½øÐÐÊý¾Ý¿â¸´ÖÆ£¬Õâ¾ÍÊÇËùνµÄ¡®Êý¾Ý¿â¸´ÖÆ¡¯¹¦ÄÜ¡£

ÆäËûµÄ½ø³Ì

PostgresÖ®Í⻹ÓÐһЩ¸¨ÖúµÄ½ø³Ì¡£ÕâЩ½ø³Ì¶¼ÊÇÓɳ£×¤postgresÆô¶¯µÄ½ø³Ì¡£

Writer process

Writer processÔÚÊʵ±µÄʱ¼äµã°Ñ¹²ÏíÄÚ´æÉϵĻº´æÐ´Íù´ÅÅÌ¡£Í¨¹ýÕâ¸ö½ø³Ì£¬¿ÉÒÔ·ÀÖ¹ÔÚ¼ì²éµãµÄʱºò(checkpoint),´óÁ¿µÄÍù´ÅÅÌд¶øµ¼ÖÂÐÔÄܶñ»¯£¬Ê¹µÃ·þÎñÆ÷¿ÉÒÔ±£³Ö±È½ÏÎȶ¨µÄÐÔÄÜ¡£Background writerÆðÀ´ÒÔºó¾ÍÒ»Ö±³£×¤Äڴ棬µ«ÊDz¢·ÇÒ»Ö±ÔÚ¹¤×÷£¬Ëü»áÔÚ¹¤×÷Ò»¶Îʱ¼äºó½øÐÐÐÝÃߣ¬ÐÝÃßµÄʱ¼ä¼ä¸ôͨ¹ýpostgresql.confÀïÃæµÄ²ÎÊýbgwriter_delayÉèÖã¬Ä¬ÈÏÊÇ200΢Ãë¡£

Õâ¸ö½ø³ÌµÄÁíÍâÒ»¸öÖØÒªµÄ¹¦ÄÜÊǶ¨ÆÚÖ´Ðмì²éµã(checkpoint)¡£

¼ì²éµãµÄʱºò£¬»á°Ñ¹²ÏíÄÚ´æÉϵĻº´æÄÚÈÝÍùÊý¾Ý¿âÎļþд£¬Ê¹µÃÄÚ´æºÍÎļþµÄ״̬һÖ¡£Í¨¹ýÕâÑù£¬¿ÉÒÔÔÚϵͳ±ÀÀ£µÄʱºò¿ÉÒÔËõ¶Ì´ÓWAL»Ö¸´µÄʱ¼ä£¬ÁíÍâÒ²¿ÉÒÔ·ÀÖ¹WALÎÞÏÞµÄÔö³¤¡£ ¿ÉÒÔͨ¹ýpostgresql.confµÄcheckpoint_segments¡¢checkpoint_timeoutÖ¸¶¨Ö´Ðмì²éµãµÄʱ¼ä¼ä¸ô¡£

WAL writer process

WAL writer process°Ñ¹²ÏíÄÚ´æÉϵÄWAL»º´æÔÚÊʵ±µÄʱ¼äµãÍù´ÅÅÌд£¬Í¨¹ýÕâÑù£¬¿ÉÒÔ¼õÇáºó¶Ë½ø³ÌÔÚд×Ô¼ºµÄWAL»º´æÊ±µÄѹÁ¦£¬Ìá¸ßÐÔÄÜ¡£ÁíÍ⣬·Çͬ²½Ìá½»ÉèΪtrueµÄʱºò£¬¿ÉÒÔ±£Ö¤ÔÚÒ»¶¨µÄʱ¼ä¼ä¸ôÄÚ£¬°ÑWAL»º´æÉϵÄÄÚÈÝдÈëWALÈÕÖ¾Îļþ¡£

Archive process

Archive process°ÑWALÈÕÖ¾×ªÒÆµ½¹éµµÈÕÖ¾Àï¡£Èç¹û±£´æÁË»ù´¡±¸·ÝÒÔ¼°¹éµµÈÕÖ¾£¬¼´Ê¹ÊµÔÚ´ÅÅÌÍêÈ«Ë𻵵Äʱºò£¬Ò²¿ÉÒԻظ´Êý¾Ý¿âµ½×îеÄ״̬¡£

stats collector process

ͳ¼ÆÐÅÏ¢µÄÊÕ¼¯½ø³Ì¡£ÊÕ¼¯ºÃͳ¼Æ±íµÄ·ÃÎÊ´ÎÊý£¬´ÅÅ̵ķÃÎÊ´ÎÊýµÈÐÅÏ¢¡£ÊÕ¼¯µ½µÄÐÅÏ¢³ýÁËÄܱ»autovaccumÀûÓ㬻¹¿ÉÒÔ¸øÆäËûÊý¾Ý¿â¹ÜÀíÔ±×÷ΪÊý¾Ý¿â¹ÜÀíµÄ²Î¿¼ÐÅÏ¢¡£

Logger process

°ÑpostgresqlµÄ»î¶¯×´Ì¬Ð´µ½ÈÕÖ¾ÐÅÏ¢Îļþ£¨²¢·ÇÊÂÎñÈÕÖ¾£©£¬ÔÚÖ¸¶¨µÄʱ¼ä¼ä¸ôÀïÃæ£¬¶ÔÈÕÖ¾Îļþ½øÐÐrotate.

AutovacuumÆô¶¯½ø³Ì

autovacuum launcher processÊÇÒÀÀµÓÚpostmaster¼ä½ÓÆô¶¯vacuum½ø³Ì¡£¶øÆä×ÔÉíÊDz»Ö±½ÓÆô¶¯×Ô¶¯vacuum½ø³ÌµÄ¡£Í¨¹ýÕâÑù¿ÉÒÔÌá¸ßϵͳµÄ¿É¿¿ÐÔ¡£

×Ô¶¯vacuum½ø³Ì

autovacuum worker process½ø³Ìʵ¼ÊÖ´ÐÐvacuumµÄÈÎÎñ¡£ÓÐʱºò»áͬʱÆô¶¯¶à¸övacuum½ø³Ì¡£

wal sender / wal receiver

wal sender ½ø³ÌºÍwal receiver½ø³ÌÊÇʵÏÖpostgresql¸´ÖÆ(streaming replication)µÄ½ø³Ì¡£Wal sender½ø³Ìͨ¹ýÍøÂç´«ËÍWALÈÕÖ¾£¬¶øÆäËûPostgreSQLʵÀýµÄwal receiver½ø³ÌÔò½ÓÊÕÏàÓ¦µÄÈÕÖ¾¡£Wal receiver½ø³ÌµÄËÞÖ÷PostgreSQL£¨Ò²³ÆÎªStandby£©½ÓÊܵ½WALÈÕÖ¾ºó£¬ÔÚ×ÔÉíµÄÊý¾Ý¿âÉÏ»¹Ô­£¬Éú³ÉÒ»¸öºÍ·¢ËͶ˵ÄPostgreSQL(Ò²³ÆÎªMaster)ÍêȫһÑùµÄÊý¾Ý¿â¡£

ºó¶ËµÄ´¦ÀíÁ÷³Ì

ÏÂÃæ¿´¿´Êý¾Ý¿âÒýÇæpostgres×Ó½ø³ÌµÄ´¦Àí¸ÅÒª¡£ÎªÁ˼òµ¥Æð¼ûÏÂÃæµÄ˵Ã÷ÖУ¬°Ñbackend process¼ò³ÆÎªbackend¡£BackendµÄmainº¯ÊýÊÇPostgresMain (tcop/postgres.c)¡£

½ÓÊÕǰ¶Ë·¢Ë͹ýÀ´µÄ²éѯ(SQLÎÄ)

SQLÎÄÊǵ¥´¿µÄÎÄ×Ö£¬µçÄÔÊÇÈÏʶ²»Á˵ģ¬ËùÒÔҪת»»³É±È½ÏÈÝÒ×´¦ÀíµÄÄÚ²¿ÐÎʽ¹¹ÎÄÊ÷parser tree,Õâ¸ö´¦ÀíµÄ³ÆÎª¹¹ÎĽâÎö¡£¹¹ÎĽâÎöµÄÄ£¿é³ÆÎªparser.Õâ¸ö½×¶ÎÖ»Äܹ»Ê¹ÓÃÎÄ×Ö×ÖÃæÉϵÃÀ´µÄÐÅÏ¢£¬ËùÒÔֻҪûÓï·¨´íÎóÖ®ÀàµÄ´íÎ󣬼´Ê¹ÊÇselect²»´æÔڵıíÒ²²»»á±¨´í¡£Õâ¸ö½×¶ÎµÄ¹¹ÎÄÊ÷±»³ÆÎªraw parse tree. ¹¹ÎÄ´¦ÀíµÄÈë¿ÚÔÚraw_parser (parser/parser.c)¡£

¹¹ÎÄÊ÷½âÎöÍêÒԺ󣬻áת»»Îª²éѯÊ÷(Query tree)¡£Õâ¸öʱºò£¬»á·ÃÎÊÊý¾Ý¿â£¬¼ì²é±íÊÇ·ñ´æÔÚ£¬Èç¹û´æÔڵϰ£¬Ôò°Ñ±íÃûת»»ÎªOID¡£Õâ¸ö´¦Àí³ÆÎª·ÖÎö´¦Àí(Analyze), ½øÐзÖÎö´¦ÀíµÄÄ£¿éÊÇanalyzer¡£ ÁíÍ⣬PostgreSQLµÄ´úÂëÀïÃæÌáµ½¹¹ÎÄÊ÷parser treeµÄʱºò£¬¸ü¶àµÄʱºòÊÇÖ¸²éѯÊ÷Query tree¡£·ÖÎö´¦ÀíµÄÄ£¿éµÄÈë¿ÚÔÚparse_analyze (parser/analyze.c)

PostgreSQL»¹Í¨¹ý²éѯÓï¾äµÄÖØÐ´ÊµÏÖÊÓͼ(view)ºÍ¹æÔò(rule), ËùÒÔÐèÒªµÄʱºò£¬ÔÚÕâ¸ö½×¶Î»á¶Ô²éѯÓï¾ä½øÐÐÖØÐ´¡£Õâ¸ö´¦Àí³ÆÎªÖØÐ´(rewrite)£¬ÖØÐ´µÄÈë¿ÚÔÚQueryRewrite (rewrite/rewriteHandler.c)¡£

ͨ¹ý½âÎö²éѯÊ÷£¬¿ÉÒÔʵ¼ÊÉú³É¼Æ»®Ê÷¡£Éú³É²éѯÊ÷µÄ´¦Àí³ÆÎª¡®Ö´Ðмƻ®´¦Àí¡¯£¬×î¹Ø¼üÊÇÒªÉú³É¹À¼ÆÄÜÔÚ×î¶ÌµÄʱ¼äÄÚÍê³ÉµÄ¼Æ»®Ê÷(plan tree)¡£Õâ¸ö²½Öè³ÆÎª¡¯²éѯÓÅ»¯¡¯(²»½Ðquery optimize, ¶øÊÇoptimize), ¶øÍê³ÉÕâ¸ö´¦ÀíµÄÄ£¿é³ÆÎª²éѯÓÅ»¯Æ÷(²»½Ðquery optimizer,¶øÊÇoptimizer, »òÕß³ÆÎªplanner)¡£Ö´Ðмƻ®´¦ÀíµÄÈë¿ÚÔÚstandard_planner (optimizer/plan/planner.c)¡£

°´ÕÕÖ´Ðмƻ®ÀïÃæµÄ²½Öè¿ÉÒÔÍê³É²éѯҪ´ïµ½µÄÄ¿µÄ¡£ÔËÐÐÖ´Ðмƻ®Ê÷ÀïÃæ²½ÖèµÄ´¦Àí³ÆÎªÖ´Ðд¦Àí¡®execute¡¯, Íê³ÉÕâ¸ö´¦ÀíµÄÄ£¿é³ÆÎªÖ´ÐÐÆ÷¡®Executor¡¯, Ö´ÐÐÆ÷µÄÈë¿ÚµØÖ·Îª£¬ExecutorRun (executor/execMain.c)

Ö´Ðнá¹û·µ»Ø¸øÇ°¶Ë¡£

·µ»Øµ½²½ÖèÒ»ÖØ¸´Ö´ÐС£

PostgreSQLµÄÔ´Âë

ÏÖÔÚ»ù±¾ÉÏÀí½âÁËPostgreSQLµÄ´óÌåµÄ½á¹¹£¬ÎÒÃÇÔÙÀ´¿´¿´PostgreSQL´úÂëµÄ½á¹¹¡£ PostgreSQL³õÆÚµÄʱºò£¬´ó¸ÅÖ»ÓÐ20ÍòÐÐ×óÓҵĴúÂ룬ÏÖÔÚÒѾ­·¢Õ¹µ½100ÍòÐÐÁË¡£Õâ¸öÁ¿À´Ëµ£¬Ã»ÓÐÖ¸µ¼¶ÁÆðÀ´ÊǼ«ÎªÄÑÀí½âµÄ£¬ÕâÀï°Ñ´ó¸ÅµÄ´úÂë½á¹¹ËµÃ÷һϣ¬Èôó¼Ò¶ÔÔ´ÂëµÄ½á¹¹ÓиöÀí½â¡£

µÚÒ»¼¶Ä¿Â¼½á¹¹

½øÈëPostgreSQLµÄÔ´ÂëĿ¼ºó£¬µÚÒ»¼¶µÄ½á¹¹ÈçϱíËùʾ¡£ÔÚÕâÒ»¼¶Àͨ¹ýÖ´ÐÐÈçÏÂÃüÁîconfigure;make;make install¿ÉÒÔÁ¢¼´½øÐмòµ¥µÄ°²×°£¬Êµ¼ÊÉÏ´ÓPostgreSQLÔ´Âë°²×°ÊǼ«Îª¼òµ¥µÄ¡£

ÎļþĿ¼ ˵Ã÷
COPYRIGHT °æÈ¨ÐÅÏ¢
GUNMakefile µÚÒ»¼¶Ä¿Â¼µÄ Makefile
GUNMakefile.in Makefile µÄ³ûÐÎ
HISTORY ÐÞ¸ÄÀúÊ·
INSTALL °²×°·½·¨¼òҪ˵Ã÷
Makefile MakefileÄ£°æ
README ¼òµ¥ËµÃ÷
aclocal.m4 config ÓõÄÎļþµÄÒ»²¿·Ö
config/ config ÓõÄÎļþµÄĿ¼
configure configure Îļþ
configure.in configure ÎļþµÄ³ûÐÎ
contrib/ contribution ³ÌÐò
doc/ ÎĵµÄ¿Â¼
src/ Ô´´úÂëĿ¼

PostgreSQL µÄsrcÏÂÃæÓС£

ÎļþĿ¼ ˵Ã÷
DEVELOPERS ÃæÏò¿ª·¢ÈËÔ±µÄ×¢ÊÓ
Makefile Makefile
Makefile.global make µÄÉ趨ֵ£¨´ÓconfigureÉú³ÉµÄ£©
Makefile.global.in ConfigureʹÓõÄMakefile.globalµÄ³ûÐÎ
Makefile.port ƽ̨Ïà¹ØµÄmakeµÄÉ趨ֵ£¬Êµ¼ÊÊÇÒ»¸öµ½makefile/MakefileµÄÁ¬½Ó. £¨´ÓconfigureÉú³ÉµÄ£©
Makefile.shlib ¹²Ïí¿âÓõÄMakefile
backend/ ºó¶ËµÄÔ´ÂëĿ¼
bcc32.mak Win32 ¥Ý©`¥ÈÓäΠMakefile (Borland C++ ÓÃ)
bin/ psql µÈ UNIXÃüÁîµÄ´úÂë
include/ Í·Îļþ
interfaces/ ǰ¶ËÏà¹ØµÄ¿âµÄ´úÂë
makefiles/ ƽ̨Ïà¹ØµÄmake µÄÉèÖÃÖµ
nls-global.mk ÐÅϢĿ¼ÓõÄMakefileÎļþµÄ¹æÔò
pl/ ´æ´¢¹ý³ÌÓïÑԵĴúÂë
port/ Æ½Ì¨ÒÆÖ²Ïà¹ØµÄ´úÂë
template/ ƽ̨Ïà¹ØµÄÉèÖÃÖµ
test/ ¸÷ÖÖ²âÊԽű¾
timezone/ Ê±ÇøÏà¹Ø´úÂë
tools/ ¸÷×Ô¿ª·¢¹¤¾ßºÍÎĵµ
tutorial/ ½Ì³Ì
win32.mak Win32 ¥Ý©`¥ÈÓäΠMakefile (Visual C++ ÓÃ)

win32.mak Win32 ¥Ý©`¥ÈÓäΠMakefile (Visual C++ ÓÃ)

ÕâÀï±È½ÏºËÐĵÄÊÇbackend,bin,interfaceÕ⼸¸öĿ¼¡£BackendÊǶÔÓ¦ÓÚºó¶Ë£¬binºÍinterface¶ÔÓ¦ÓÚǰ¶Ë¡£

binÀïÃæÓÐpgsql,initdb,pg_dumpµÈ¸÷ÖÖ¹¤¾ßµÄ´úÂë¡£interfaceÀïÃæÓÐPostgreSQLµÄCÓïÑԵĿâlibpq,ÁíÍâ¿ÉÒÔÔÚCÀïǶÈëSQLµÄECPGÃüÁîµÄÏà¹Ø´úÂë¡£

BackendĿ¼µÄ½á¹¹ÈçÏ£º

Ŀ¼Îļþ ˵Ã÷
Makefile makefile
access/ ¸÷ÖÖ´æ´¢·ÃÎÊ·½·¨(ÔÚ¸÷¸ö×ÓĿ¼ÏÂ) common(¹²Í¬º¯Êý)¡¢gin (Generalized Inverted IndexͨÓÃÄæÏòË÷Òý)
gist (Generalized Search TreeͨÓÃË÷Òý)¡¢ hash (¹þÏ£Ë÷Òý)¡¢heap (heapµÄ·ÃÎÊ·½·¨)¡¢
index (ͨÓÃË÷Òýº¯Êý)¡¢ nbtree (Btreeº¯Êý)¡¢transam (ÊÂÎñ´¦Àí)
bootstrap/ Êý¾Ý¿âµÄ³õʼ»¯´¦Àí(initdbµÄʱºò)
catalog/ ϵͳĿ¼
commands/ SELECT/INSERT/UPDATE/DELETEÒÔΪµÄSQLÎĵĴ¦Àí
executor/ Ö´ÐÐÆ÷(·ÃÎʵÄÖ´ÐÐ)
foreign/ FDW(Foreign Data Wrapper)´¦Àí
lib/ ¹²Í¬º¯Êý
libpq/ ǰ¶Ë/ºó¶ËͨÐÅ´¦Àí
main/ postgresµÄÖ÷º¯Êý
nodes/ ¹¹ÎÄÊ÷½ÚµãÏà¹ØµÄ´¦Àíº¯Êý
optimizer/ ÓÅ»¯Æ÷
parser/ SQL¹¹ÎĽâÎöÆ÷
port/ ƽ̨Ïà¹ØµÄ´úÂë
postmaster/ postmasterµÄÖ÷º¯Êý (³£×¤postgres)
replication/ streaming replication
regex/ ÕýÔò´¦Àí
rewrite/ ¹æÔò¼°ÊÓͼÏà¹ØµÄÖØÐ´´¦Àí
snowball/ È«ÎļìË÷Ïà¹Ø£¨Óï¸É´¦Àí£©
storage/ ¹²ÏíÄÚ´æ¡¢´ÅÅÌÉϵĴ洢¡¢»º´æµÈÈ«²¿Ò»´Î/¶þ´Î¼Ç¼¹ÜÀí(ÒÔϵÄĿ¼)buffer/(»º´æ¹ÜÀí)¡¢ file/(Îļþ)¡¢
freespace/(Fee Space Map¹ÜÀí) ipc/(½ø³Ì¼äͨÐÅ)¡¢large_object /(´ó¶ÔÏóµÄ·ÃÎʺ¯Êý)¡¢
lmgr/(Ëø¹ÜÀí)¡¢page/(Ò³Ãæ·ÃÎÊÏà¹Øº¯Êý)¡¢ smgr/(´æ´¢¹ÜÀíÆ÷)
tcop/ postgres (Êý¾Ý¿âÒýÇæµÄ½ø³Ì)µÄÖ÷Òª²¿·Ö
tsearch/ È«ÎļìË÷
utils/ ¸÷ÖÖÄ£¿é(ÒÔÏÂĿ¼) adt/(ǶÈëµÄÊý¾ÝÀàÐÍ)¡¢cache/(»º´æ¹ÜÀí)¡¢ error/(´íÎó´¦Àí)¡¢fmgr/(º¯Êý¹ÜÀí)¡¢
hash/(hashº¯Êý)¡¢ init/(Êý¾Ý¿â³õʼ»¯¡¢postgresµÄ³õÆÚ´¦Àí)¡¢ mb/(¶à×Ö½ÚÎÄ×Ö´¦Àí)¡¢
misc/(ÆäËû)¡¢mmgr/(ÄÚ´æµÄ¹ÜÀíº¯Êý)¡¢ resowner/(²éѯ´¦ÀíÖеÄÊý¾Ý(buffer pin¼°±íËø)µÄ¹ÜÀí)¡¢
sort/(ÅÅÐò´¦Àí)¡¢time/(ÊÂÎñµÄ MVCC ¹ÜÀí)

backendµÈµÄ´úÂëµÄÍ·Îļþ°üº¬ÔÚincludeÀïÃæ¡£Æä×éÖ¯ËäÈ»ÓëbackendµÄĿ¼½á¹¹ÀàËÆ£¬µ«ÊDz¢·ÇÍêÈ«Ïàͬ£¬»ù±¾ÉÏÀ´ËµÏÂÒ»¼¶µÄ×ÓĿ¼²»ÔÙÉèÏÂÒ»¼¶Ä¿Â¼¡£ÀýÈçbackendµÄĿ¼ÏÂÃæÓÐutilsÕâ¸öĿ¼£¬¶øutilÏÂÃæ»¹ÓÐadtÕâ¸ö×ÓĿ¼£¬µ«ÊÇincludeÀïÃæÊ¡ÂÔÁËÕâ¸öĿ¼£¬±ä³ÉÁË±âÆ½µÄ½á¹¹¡£

access/
bootstrap/
c.h
catalog/
commands/
dynloader.h
executor/
fmgr.h
foreign/
funcapi.h
getaddrinfo.h
getopt_long.h
lib/
libpq/
mb/
miscadmin.h
nodes/
optimizer/
parser/
pg_config.h
pg_config.h.in
pg_config.h.win32
pg_config_manual.h
pg_config_os.h
pg_trace.h
pgstat.h
pgtime.h
port/
port.h
portability/
postgres.h
postgres_ext.h
postgres_fe.h
postmaster/
regex/
rewrite/
rusagestub.h
snowball/
stamp-h
storage/
tcop/
tsearch/
utils/
windowapi.h

´úÂëµÄÔĶÁ·½·¨

Óõ÷ÊÔÆ÷×·×Ù´úÂë

PostgreSQLÄÇÑùµÄÅÓ´óϵͳ£¬ÓÃÑÛ¾¦À´×·×ÙÔ´Âë²¢²»ÈÝÒס£ÕâÀïÍÆ¼öÓÃgdbÕâÑùµÄʵ¼Êµ÷ÊÔÆ÷À´×·×Ù´úÂëµÄÖ´ÐÐÁ÷³Ì¡£¿ÉÄÜÓÐЩÈËη¾åµ÷ÊÔÆ÷£¬µ«ÊÇÈç¹ûÖ»ÊǼòµ¥×·×Ù´úÂëµÄÖ´ÐÐÁ÷µÄ»°£¬»¹ÊǺܼòµ¥µÄ¡£

µ«ÊǶàÉÙ»¹ÊÇÒª×öһЩ׼±¸µÄ£¬PostgreSQLÔÚ±àÒëµÄʱºòÒ»¶¨Òª°Ñµ÷ÊÔ¿ª¹Ø´ò¿ª¡£Í¨³£ÔÚ±àÒëµÄʱºòconfigureµÄʱºò¼ÓÉÏ--enable-debugµÄÑ¡ÏȻºó¿ÉÄܵϰ¿ÉÒԱ༭src/Makefile.globalÕâ¸öÎļþ

CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith \
-Wdeclaration-after-statement -Wendif-labels -Wformat-security \
-fno-strict-aliasing -fwrapv

ÉÏÃæµÄÐеÄ"-O2"Ñ¡Ïîɾ³ý£¬È»ºó¼ÓÉÏ"-g"

CFLAGS = -g -Wall -Wmissing-prototypes -Wpointer-arith \
-Wdeclaration-after-statement -Wendif-labels -Wformat-security \
-fno-strict-aliasing -fwrapv

"-O2"ÊDZàÒëÆ÷µÄÓÅ»¯Ñ¡ÏÈç¹û´ò¿ªÁË£¬´úÂëµÄÖ´ÐÐ˳Ðò»á¸Ä±ä£¬Ê¹µÃ×·×ÙÆð´úÂëÀ´±È½ÏÀ§ÄÑ£¬ËùÒÔҪȥ³ý¡£µ±È»ÕâÑùµÄ»°£¬±àÒëºóµÄ¿ÉÖ´ÐÐÎļþ»á±È½Ï´ó£¬¶øÇÒ»á±È½ÏÂý£¬Éú²ú»·¾³²»Ì«ºÏÊÊ¡£´ó¼ÒÐèÒªÀí½âÕâ¸ö²Ù×÷½ö½öÊÇÔÚѧϰµÄʱºò¶øÉèÖõġ£

ʵ¼ÊʹÓÃgdbÊÔÊÔ

ÏÂÃæÊµ¼ÊʹÓÃgdbÀ´¿´¿´±È½Ï¼òµ¥µãµÄselectÎÄ¡£

select 1;

selectÎÄÖ´Ðкó£¬ÖÁexecutorµÄÆäÖÐÒ»¸öº¯ÊýExecSelectÍ£Ö¹£¬È»ºóÎÒÃǵ÷²éÒ»ÏÂʵ¼Êµ÷ÓÃÁËÄÇЩº¯Êý¡£

Ê×ÏÈÒÔPostgreSQLµÄ³¬¼¶Óû§µÇ¼¡£ÎҵĻ·¾³ÊÇʹÓÃt-ishiiÕâ¸öÓû§°²×°PostgreSQLµÄ£¬Í¨³£Ò»°ãʹÓÃpostgresÕâ¸öÓû§£¬´ó¼ÒÔÚÔĶÁµÄʱºòÌæ»»Ò»Ï¼´¿É¡£

È»ºó£¬ÓÃpsqlºÍÊý¾Ý¿â½øÐÐÁ¬½Ó£¬Á¬½ÓµÄ״̬¿ÉÒÔͨ¹ýpsÃüÁîµ÷²é¡£

$ ps x

3714 ? Ss 0:00 postgres: t-ishii test [local] idle

¿ÉÒÔ¿´µ½ÉÏÃæµÄ½ø³Ì¡£Õâ¸ö¾ÍÊǺó¶ËµÄ½ø³Ì¡£Õâ¸öÊǺó¶ËµÄ½ø³Ì£¬»¹ÓÐÆäËû´óÁ¿Óû§µÄPostgreSQLµÄÁ¬½ÓÒ²ÏÔʾ³öÀ´£¬±È½ÏÄÑ¿´Çå³þ£¬ËùÒÔ»¹ÊÇ×¼±¸ºÃ²âÊԵĻ·¾³À´½øÐвâÊԱȽϺá£

Æô¶¯gdbºó£¬¸½¼Óµ½psÀïÏÔʾµÄ½ø³ÌºÅÂë¡£

$ gdb postgres 3714
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-vine-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/local/pgsql/bin/postgres...done.
Attaching to program: /usr/local/pgsql/bin/postgres, process 3714
Reading symbols from /lib64/libdl.so.2...done.
Loaded symbols for /lib64/libdl.so.2
Reading symbols from /lib64/libm.so.6...done.
Loaded symbols for /lib64/libm.so.6
Reading symbols from /lib64/libc.so.6...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /lib64/libnss_files.so.2...done.
Loaded symbols for /lib64/libnss_files.so.2
0x00007fad266f82e2 in __libc_recv (fd=<value optimized out>, buf=0xbe9900,
n=8192, flags=<value optimized out>)
at ../sysdeps/unix/sysv/linux/x86_64/recv.c:30
30 ../sysdeps/unix/sysv/linux/x86_64/recv.c:
in ../sysdeps/unix/sysv/linux/x86_64/recv.c
(gdb)

(gdb) ÊÇgdbµÄÃüÁîÐС£ÔÚÕâ¸ö״̬Ï£¬¿ÉÒÔ½ÓÊÜgdbµÄÃüÁÈç¹ûÊäÈëbÃüÁîµÄ»°£¬ÔÚExecResult¿ÉÒÔÉèÖöϵ㡣

(gdb) b ExecResult
Breakpoint 1, ExecResult (node=0xd13eb0) at nodeResult.c:75
(gdb)

psqlÆô¶¯ÒÔºó´ÓÖÕ¶ËÖ´ÐÐselect 1,ÊäÈëÒԺ󣬺ó¶Ë¾Í»áÖ´ÐиÃÃüÁî¡£Õâ¸öʱºò£¬postgres½ø³ÌÒѾ­ÔÝÍ££¬ËùÒÔpsql»á¶¯²»ÁË¡£Òª¼ÌÐøÖ´Ðеϰ£¬¿ÉÔÚgdbÀïÖ´ÐÐ"c"ÃüÁî¡£Ö´ÐÐÁËÒԺ󣬾ͻáÔÚExecResult ´¦Í£Ö¹¡£

Continuing.

Breakpoint 1, ExecResult (node=0xd13eb0) at nodeResult.c:75
75 econtext = node->ps.ps_ExprContext;
(gdb)

µ½ExecSelectΪֹµÄº¯ÊýµÄµ÷Ó÷¾¶¿ÉÒÔÓÃbtµÄÃüÁîÏÔʾ³öÀ´¡£

(gdb) bt
#0 ExecResult (node=0xd13eb0) at nodeResult.c:75
#1 0x00000000005b92a4 in ExecProcNode (node=0xd13eb0) at execProcnode.c:367
#2 0x00000000005b71bb in ExecutePlan (estate=0xd13da0, planstate=0xd13eb0,
operation=CMD_SELECT, sendTuples=1 '\001', numberTuples=0,
direction=ForwardScanDirection, dest=0xcf9938) at execMain.c:1439
#3 0x00000000005b5835 in standard_ExecutorRun (queryDesc=0xc62820,
direction=ForwardScanDirection, count=0) at execMain.c:313
#4 0x00000000005b5729 in ExecutorRun (queryDesc=0xc62820,
direction=ForwardScanDirection, count=0) at execMain.c:261
#5 0x00000000006d2f79 in PortalRunSelect (portal=0xc60810,
forward=1 '\001', count=0, dest=0xcf9938) at pquery.c:943
#6 0x00000000006d2c4e in PortalRun (portal=0xc60810,
count=9223372036854775807, isTopLevel=1 '\001', dest=0xcf9938,
altdest=0xcf9938, completionTag=0x7fffa4b0eeb0 "") at pquery.c:787
#7 0x00000000006cd135 in exec_simple_query
(query_string=0xcf8420 "select 1;") at postgres.c:1018
#8 0x00000000006d1144 in PostgresMain (argc=2, argv=0xc42da0,
username=0xc42c40 "t-ishii") at postgres.c:3926
#9 0x0000000000683ced in BackendRun (port=0xc65600) at postmaster.c:3600
#10 0x00000000006833dc in BackendStartup (port=0xc65600) at postmaster.c:3285
#11 0x0000000000680759 in ServerLoop () at postmaster.c:1454
#12 0x000000000067ff4d in PostmasterMain (argc=3, argv=0xc40e00)
at postmaster.c:1115
#13 0x00000000005f7a39 in main (argc=3, argv=0xc40e00) at main.c:199
(gdb)

˵Ã÷һϿ´µÄ·½·¨£¬·¢Æðµ÷Óõĺ¯ÊýÔÚÏÂÃæ£¬±»µ÷Óõĺ¯ÊýÔÚÉÏÃæ¡£Ò²¾ÍÊÇExecProcNodeµ÷ÓÃÁËExecResult£¬ExecutePlanµ÷ÓÃÁËExecProcNode£¬ExecutorRunµ÷ÓÃÁËExecProcNode£¬ÕâÑùµÄÐÎʽÀ´Ð´¡£ÌرðÊÇÖмäµÄµÚ7ÐС£

#7 0x00000000006cd135 in exec_simple_query
(query_string=0xcf8420 "select 1;") at postgres.c:1018

ÕâÑù¿ÉÒÔÇå³þ¿´µ½ÔÚ´¦ÀíSELECTÎÄ¡£:)×Ðϸ¿´gdbµÄÊä³ö£¬¿ÉÒÔ·¢ÏÖÕâЩϸ½Ú¡£

gdbÊÇÔ´Âëµ÷ÊÔÆ÷£¬ËùÒÔ¿ÉÒÔ¿´µ½ºÍÔ´´úÂëµÄ¶ÔÓ¦¹ØÏµ¡£ÀýÈçlistÃüÁî¿ÉÒÔ¿´µ½ÏÖÔÚÖ´ÐеÄÐи½½üµÄ´úÂë¡£

(gdb) list
70 TupleTableSlot *resultSlot;
71 PlanState *outerPlan;
72 ExprContext *econtext;
73 ExprDoneCond isDone;
74
75 econtext = node->ps.ps_ExprContext;
76
77 /*
78 * check constant qualifications like (2 > 1), if not already done
79 */

ÀûÓÃupÃüÁî¿ÉÒÔÍùÉÏÃæµÄº¯ÊýÒÆ¶¯¡£ÏÂÃæÓÃlistÃüÁ¿ÉÒÔÈ·ÈÏʵ¼Êµ÷ÓÃExecSelect µÄµØ·½¡£

(gdb) up
#1 0x00000000005b92a4 in ExecProcNode (node=0xd13eb0) at execProcnode.c:367
367 result = ExecResult((ResultState *) node);
(gdb) list
362 {
363 /*
364 * control nodes
365 */
366 case T_ResultState:
367 result = ExecResult((ResultState *) node);
368 break;
369
370 case T_ModifyTableState:
371 result = ExecModifyTable((ModifyTableState *) node);

ÀûÓÃdown¿ÉÒÔÍùÏÂÃæµÄº¯ÊýÒÆ¶¯¡£ÀûÓÃupºÍdownµÄ×éºÏ£¬¿ÉÒÔµ÷²éº¯ÊýµÄµ÷ÓùØÏµ¡£

ÒªÍ˳ögdbµÄ»°¿ÉÒÔÓÃquit¡£

(gdb) quit

µ½ÁËÕâÀïgdb¾Í½áÊøÁË£¬µ«ÊǺó¶Ë½ø³Ì²¢²»»áÖÕÖ¹¡£

ʹÓÃtagÀ´Ìø×ªµ½ÏàÓ¦µÄº¯Êý¶¨ÒåÎļþ

ÎÒÃÇÒѾ­Ê¹ÓÃÁËgdbÀ´µ÷²épostgreSQLµÄÔËÐУ¬ÁíÍâÓÃgdbµÄlistÀ´×·×ÙÔ´ÂëµÄ»°»¹ÊÇÏ൱ÐÁ¿àµÄ£¬Ò»°ãÀ´ËµÓÃemacsµÈ±à¼­Æ÷Ò»Æðµ÷²éºÍä¯ÀÀ´úÂ룬¿ÉÒÔÔڱߵ÷ÊԱ߲鿴´úÂë¡£

µ±È»£¬ÔÚgdbģʽÏÂÒ²¿ÉÒÔʹÓá£Õâ¸öʱºò£¬ÀýÈçÈç¹ûÏë¿´¿´'exec_simple_query'µÄ¶¨ÒåµÄ»°£¬Ê¹ÓÃemacsµÄtagsÃüÁî¿ÉÒÔÁ¢¿ÌÌø×ªµ½º¯Êý¶¨ÒåµÄµØ·½¡£ÒªÊ¹ÓÃtagsµÄ»°£¬ÐèÒªÉú²útagsÎļþ£¬PostgreSQLµÄ»°£¬´øÓÐÉú²útagsÎļþµÄ½Å±¾¡£

$ cd /usr/local/src/postgresql-9.1.1/src
$ tools/make_etags (ʹÓÃemacsµÄ³¡ºÏ)
$ tools/make_tags (ʹÓÃviµÄ³¡ºÏ)

ÕâÑù¾Í¿ÉÒÔÀ­¡£ È»ºóÔÚemacsÖУ¬ÔÚexec_simple_query ´¦Ö´ÐÐ'ESC-.'(°´ÁËESC¼üºóÊäÈ붺ºÅ.)£¬¼´¿É´ò¿ª¹â±êËùÔÚÎÄ×ÖËùÔÚµÄexec_simple_queryº¯ÊýµÄ¶¨ÒåÎļþ¡£

×ܽá

ÒªÍêÈ«Àí½âPostgreSQLµÄ»°£¬Í¨¹ýµ÷²éÔ´´úÂ뻹ÊDZȽÏÓÐЧ¹ûµÄ¡£ÒªÀí½â´úÂëµÄ»°£¬¿ÉÒÔ°´ÕÕÄ¿µÄ×Ô¼º×·¼Ó±ØÒªµÄ¹¦ÄÜ£¬¸Ä±äһЩ¹¦ÄܵÄÐÐΪ£¬´ó¼Ò¿ÉÒÔ×î´óÏ޶ȵĵÄÏíÊÜ¿ªÔ´´øÀ´µÄºÃ´¦¡£

   
7307 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ