æè¿ãPostgreSQLãšMSSQLã®çµ±åã®èª¬æãããã§æ¢ã«å ¬éãããŠããŸã ãããã詳现ã¯æ確ã«æ¬ ããŠããŸããã ãããã£ãŠããã®åºçç©ã®ç®çã¯æ¬¡ã®ãšããã§ãã
- tds_fdwãšåŒã°ããMSSQLã®FDWã«é¢ããäžè¬ã«å ¬éãããŠããæ å ±ãå±éããã³æ·±åïŒã¡ãžã£ãŒããŒãžã§ã³ã®éãã«ã€ããŠè©±ããåºæ¬çãªäºææ§ã®åé¡ã説æããŸãã
- å€éšããŒãã«ã䜿çšããŠã¯ãšãªãæé©åããå¯èœæ§ã«ã€ããŠè©±ããŸãã
- å®äœåãããè¡šçŸã§ã®å€éšããŒã¿ã®ãã£ãã·ã¥ã«è§Šããã
- PostgreSQLãšMSSQLã®çµ±åãžã®ãšããŸããã¯ãªã¢ãããŒãã«ã€ããŠå°ã話ããŠãã ããã
TDS FDWã®ã€ã³ã¹ããŒã«ãšæ§æ
PostgresProã®ã¹ã¿ããã¯ãã§ã«ãã®ããã»ã¹ã«ã€ããŠååã«è¿°ã¹ãŠããŸããç¹°ãè¿ãã¯ããŸããã PostgreSQLã®å ¬åŒããã¥ã¡ã³ããštds_fdwããã®äŸãžã®ãªã³ã¯ãããã€ãæ®ããŸãã
- PGã§ã®æ¡åŒµïŒæ¡åŒµïŒã®äœæïŒ off.documentation ;
- ãµãŒããŒã®äœæïŒ off.documentation ã tds_fdwã® äŸ ;
- ãŠãŒã¶ãŒã®ãããã³ã°ã®äœæïŒãŠãŒã¶ãŒãããã³ã°ïŒïŒ ããã¥ã¡ã³ãå€ ã tds_fdwã®äŸ ;
- å€éšããŒãã«ã®äœæïŒå€éšããã¥ã¡ã³ã ã tds_fdwã®äŸ
ãããŠãã1ã€ïŒ tds_fdwã®ã€ã³ã¹ããŒã«æé ã«ç€ºãããŠããããã«ããªãã§ãã ãã
sudo make USE_PGXS=1 install
ç«ãä¿åã ãdebããã±ãŒãžãåéããŠç掻ã楜ãã¿ãŸããã ïŒ
sudo USE_PGXS=1 checkinstall
TDS FDWã®ã¡ãžã£ãŒããŒãžã§ã³éã®éã
çŸæç¹ã§ã¯ãFDWã«ã¯2ã€ã®çŸåšã®ããŒãžã§ã³ããããŸããå®å®ç1.0.7ãš2.0.0-alphaã¯ãæ¬è³ªçã«ãã¹ã¿ãŒãã©ã³ãã§ãããæãèå³æ·±ããã®ããã¹ãŠçºçããŸãã éãã®ç°¡åãªãªã¹ãã次ã«ç€ºããŸãã
- 2.0.0ã§ã¯ãå€éšããŒãã«ã«çŽæ¥é¢é£ããWHEREå¥ã®æ¡ä»¶ã®ããã·ã¥ããŠã³ãµããŒããã€ãã«å°å ¥ãããŸããã ãã ããforeign_table宣èšå ã§ã¯ãšãªãªãã·ã§ã³ã䜿çšããå Žåã¯ãäŸç¶ãšããŠããŸãæ©èœããŸããã
- tds 7.4ã®ãµããŒããç»å ŽããŸããïŒããããªãå¿ èŠã§éèŠãªã®ãã以äžã«èª¬æããŸãïŒã
- å€éšããŒãã«ã§ã®DISTINCTã®äœæ¥ã«ã¯ããã€ãã®åé¡ããããŸãïŒããã¯GitHubã®åé¡ã§ã ïŒããç§ã®æãããããæé·ããŠãããã©ããããŸãã¯ãã°ãéåžžã«ããªãããŒã§ãããã©ããã¯äžæã§ãç¹å®ã®ç¶æ³äžã§ã®ã¿è¡šç€ºãããŸãã
äºææ§ã®èœãšãç©Ž
æè¿ãŸã§ãtds_fdwã¯7.3ããäžã®tdsããŒãžã§ã³ã§ã¯åäœããŸããã§ããã ãããããã®èšäºã®å·çäžã«ãããŒãžã§ã³7.4ã®ãµããŒããèŠã€ããå¿ èŠããããŸãã ã ãã®ããã 3ds803cã³ããã以éãtds_fdwã¯tdsã®çŸåšã®ãã¹ãŠã®ããŒãžã§ã³ããµããŒãããŠããŸãã
ãã®ããŒãžã§ã³ã®ãµããŒãããªãããã»ã©éèŠãªã®ã§ããïŒ å人çã«ã¯ãããã¯MSSQL 2012ã§äœæ¥ããå¿ èŠãããããéèŠã§ããRubyon Railsã§ã¯ã activerecord-sqlserver-adapterã©ã€ãã©ãªã䜿çšããŠMSSQLã«æ¥ç¶ããMSSQLã¯tiny_tdsã䜿çšããŸãã MSSQLã åé¡ã¯ãRoR 3ããã³å¯Ÿå¿ããã©ã€ãã©ãªã®ã¡ãžã£ãŒããŒãžã§ã³ã§ã¯ãtds 7.1ããŒãžã§ã³ã®äœ¿çšãçŠæ¢ãããŠããã4 +ããŒãžã§ã³ã§ã®ã¿æ§æãä»ããŠå€æŽã§ããããšã§ãã åæã«ãããŒãžã§ã³7.1ã¯MSSQL 2008ã§ãåé¡ãªãæ©èœããŸãããMSSQL 2012ãšéä¿¡ããå Žåã次ã®ãšã©ãŒã衚瀺ãããŸãã
DB-Library error: DB #: 20017, DB Msg: Unexpected EOF from the server
ActiveRecord::LostConnection: TinyTds::Error: closed connection: ...
TinyTds::Error: Adaptive Server connection failed
ãªã©ã
RoRã®æŽæ°ã¯ã«ããŽãªãŒçã«é·ãé«äŸ¡ã§ãã®ã§ãFDWã®äœ¿çšã«åãæ¿ããããšã§ããããåé¿ãããã£ãã®ã§ãã ããããtds_fdwã¯å¿ èŠãªããŒãžã§ã³ããµããŒãããŠããããããã«ã€ããŠäœããããªããã°ãªããŸããã§ããã
ééãã«ã€ããŠã¯ããããã¯ãã¹ãŠã©ã³ãã ã«è¡šç€ºãããåãå Žæã®ããã«æé·ããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ããã©ãšãã£ããäœæããã©ã³ãã ãªå Žæã§ã©ã³ãã ãªæéã«èœäžãããŸãã ãã®äžåèªã¯ãã¹ãŠãæ£ããããŒãžã§ã³ã®tdsã䜿çšããŠã®ã¿åŠçãããŸãã MSSQL 2012ã®å Žåãããã¯tds 7.4ã§ãã
æåã®åŸ ã¡äŒãã¯æ¬¡ã®ãšããã§ããtds7.4ã®ãµããŒãã¯ãããŒãžã§ã³0.95以éã®FreeTDSã§å®è£ ãããŠããŸãã ããããUbuntu 14.04ããã³16.04 ã§ã¯ãããããããŒãžã§ã³0.91-5ããã³0.91-6.1build1ããã®ãŸãŸäœ¿çšã§ããŸãã ãŸãã次ã®2ã€ã®æ¹æ³ã§FreeTDSã®æ°ããããŒãžã§ã³ãå ¥æã§ããŸãã
- ãœãŒã¹ãã FreeTDS ããã«ããã
- FreeTDS 1.00ã§ä»£æ¿PPAã䜿çšããŸãã
2çªç®ã®ã±ãŒã¹ã§ã¯ã1ã€ã®èŠåããããŸããæå®ããããªããžããªã«ã¯ãUbuntu 14.04ïŒä¿¡é Œã§ããïŒå°çšã®ããã±ãŒãžããããŸãã 16.04ïŒããã¯ãŒãã¢ã«ã§ãïŒã§ã¯ãäœããããŸããã ããããäžè¬çã«ãèŽåœçãªããšã¯ãããŸããã16.04ã®/etc/apt/sources.list.d/jamiewillis-freetds-trusty.listã次ã®ããã«ä¿®æ£ãããšã
deb http://ppa.launchpad.net/jamiewillis/freetds/ubuntu trusty main
ããã±ãŒãžãææ°ã®Ubuntuã«ã€ã³ã¹ããŒã«ã§ããŸãïŒãããŠãã¯ããåé¡ãªãåäœããŸãïŒã
CentOSããæã¡ã®å Žåã¯ããã®äžã§ããŒãžã§ã³0.95ãŸã§ã®FreeTDSãç°¡åã«èŠã€ããããšãã§ããŸã ã å€ããã®ã¯ãã¹ãŠãœãŒã¹ããåéããå¿ èŠããããŸãã
äºææ§ã®åé¡ã®åé¿ç
ãšã©ãŒçªå·20017ãšãã®æŽŸçç©ãéåžžã«è¿·æã§ãããå¿ èŠãªããŒãžã§ã³ã®tdsã䜿çšããå¯èœæ§ããªãå ŽåãPostgreSQLã«ãã£ãŠã¹ããŒãããäŸå€ãåŠçããFDWçµç±ã§MSSQLã«ã¢ã¯ã»ã¹ãããããã¯/ã¡ãœãã/ãªã©ãåèµ·åã§ããŸãã ç§ã®å ŽåãRoRã¢ããªã±ãŒã·ã§ã³ã®å Žåã次ã®ããã«ãªããŸããã
def retry_mssql_operation(tries = 5) begin yield rescue ActiveRecord::StatementInvalid => e if e.message =~ /^PG::FdwUnableToCreateExecution/ && tries > 0 tries -= 1 retry else raise end end end
æåã¯ç¯çŽã§ããŸãããé·æçãªãœãªã¥ãŒã·ã§ã³ã«ã¯é©åã§ã¯ãããŸããã
ããã·ã¥ããŠã³ãšFDWããæã§ãåäœããæ¹æ³ã«ã€ããŠå°ã
å€éšããŒã¿ããŒã¹ãžã®ã¯ãšãªæé©åã®è³ªåã«ç§»ãåã«ãããã·ã¥ããŠã³ã«ã€ããŠå°ã説æããããšæããŸãã äœããã®çç±ã§ããã®ã¡ã«ããºã ã®èª¬æã¯ãã·ã¢èªã®ãªãœãŒã¹ã§ã¯å¿ èŠãšãããŠããŸããïŒãŸãã¯ããã®æ£ãã翻蚳ã«ç²ŸéããŠãããããããã¯äžã®äžé çãã³ããã¬ã¹ã¯æããã«ãã®ãªãã©ã®ãã®ã§ã¯ãããŸããïŒã ãããã£ãŠãç§ã¯ããã«ã€ããŠç°¡åã«è©±ãããã§ãã
æãåçŽãªã±ãŒã¹ã§ã¯ãPGã§æ¬¡ã®åœ¢åŒã®ã¯ãšãªãå®è¡ããŸãã
SELECT column_name FROM foreign_table WHERE column_id = 42;
å®éãããŒã¿ããŒã¹ã§ã¯æ¬¡ã®ããšãçºçããŸãã
- ãµãŒãããŒãã£ã®ãµãŒããŒã«ããforeign_tableïŒãŸãã¯ããŒãã«ã§ã¯ãªãïŒã«é¢é£ä»ããããããŒãã«ãããpostgresã®ãã¹ãŠã®ã³ã³ãã³ããæœåºãããŸãã
- 次ã«ãåä¿¡ããããŒã¿ã¯WHEREããã®æ¡ä»¶ã«åºã¥ããŠãã£ã«ã¿ãªã³ã°ãããŸãã
ç¹ã«æ°çŸäžè¡ã®ããŒãã«ãã1ã€ã ããååŸããå Žåã¯ãããŸãå¹ççãªã¹ããŒã ã§ã¯ãããŸããã ãããŠãããã«ããã·ã¥ããŠã³ããããŸãã ãã®ã¡ã«ããºã ã«ããããªã¢ãŒããµãŒããŒããåä¿¡ããè¡æ°ãæžããããšãã§ããŸãã ããã¯ãPGåŽã§å¿ èŠãªãã®ãèæ ®ããŠãã€ãŸãWHEREãJOINãORDERãªã©ã«ç€ºãããŠãããã®ãèæ ®ããŠãå€éšããŒã¿ããŒã¹ãžã®ã¯ãšãªãæ§ç¯ããããšã«ãã£ãŠè¡ãããŸããã€ãŸããFDWã¯PotsgreSQLã§å ã®ã¯ãšãªã解æããããããéžæããŸãããããã®æ¡ä»¶ã«å¿ããŠããªã¢ãŒãããŒã¿ãŠã§ã¢ããŠã¹ãæ°ãããªã¯ãšã¹ããç解ããŠåéã§ããããšã åœç¶ã®çµæãšããŠãããã·ã¥ããŠã³ã¯ãã¹ãŠã®FDWã«é©çšã§ããããã§ã¯ãããŸããïŒããšãã°ãããã·ã¥ããŠã³ã¯file_fdwã§ã¯ã»ãšãã©åœ¹ã«ç«ã¡ãŸãããã postgres_fdwãŸãã¯tds_fdwã§ã¯ãŸã£ããéã§ãïŒã
ããã ã©ã€ã³ïŒããã·ã¥ããŠã³ã¯ã¯ãŒã«ã§ãå€éšããŒã¿ã¹ãã¬ãŒãžã¡ã«ããºã ã䜿çšã§ããPGãšå€éšã¹ãã¬ãŒãžéã§åŸªç°ããããŒã¿éãåæžã§ãããããã¯ãšãªã®å®è¡ãé«éåãããŸãããåæã«å¥ã®ã¡ã«ããºã ã§ãããããå®è£ ããŠç¶æããå¿ èŠããããŸãããªãéèŠãªã¿ã¹ã¯ã
ãªã¯ãšã¹ãã®é«éå
ã€ã³ã¹ããŒã«ãæ§æãããã³ããŒããŠã§ã¢ãææ¡ããŸããã 次ã«ãMSSQLããããŒã¿ããã°ããæœåºããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ããã·ã¥ããŠã³
ãã®ã¢ãããŒãã¯ãããŸããŸãªJOINããã®ä»ã®SQLããªãã¯ã®è² æ ã«ãªããªãåçŽãªã¯ãšãªã®å Žåã«åœ¹ç«ã¡ãŸãã tds_fdwã®ææ°ããŒãžã§ã³ïŒçŸåš2.0.0-alphaïŒã§ã¯ãWHEREã®åçŽãªããã·ã¥ããŠã³ã®ãµããŒããå°å ¥ãããŸããã
ããšãã°ãMSSQLããŒã¿ããŒã¹ã®simple_tableããŒãã«ãèããŸãã ãã®ããŒãã«ã«ã¯ãidãšdataã®2ã€ã®ãã£ãŒã«ãããããŸãã å€éšããŒãã«ã®å®çŸ©ã¯æ¬¡ã®ãšããã§ãã
CREATE FOREIGN TABLE mssql_table ( id integer, custom_data varchar OPTIONS (column_name 'data')) SERVER mssql_svr OPTIONS (schema_name 'dbo', table_name 'simple_table', row_estimate_method 'showplan_all', match_column_names '1');
ãã®å ŽåãPostgreSQLãšMSSQLã®æåã®åã®ååã¯idã§ãã 2çªç®ã®åã®ååã¯PGãšMSSQLã§ç°ãªããããããã§ã¯column_nameãªãã·ã§ã³ãå¿ èŠã§ãã ãã®ãã©ã¡ãŒã¿ãŒã¯ãPostgreSQLããMSSQLã®åãžã®åã®ãããã³ã°ãæ瀺çã«èšå®ããŸãã ãŸããæåŸã«match_column_nameãã©ã¡ãŒã¿ãŒãæå®ãããŸã ãããã¯ãååã«ããååã®æé»çãªãããã³ã°ãæ åœããŸããã€ãŸããidåããããã³ã°ãããŸãã
ãªã¯ãšã¹ããå®è¡ããå Žåãããã§çµããã§ãã
SELECT custom_data FROM mssql_table WHERE id = 42;
FDWã¯WHEREã§æå®ãããæ¡ä»¶ãåŠçããMSSQLã§æ£ããã¯ãšãªãåéããå¿ èŠããããŸãã ããšãã°ãããïŒ
SELECT data FROM simple_table WHERE id = 42;
tds_fdwããŒãžã§ã³1.0.7以äžã®å ŽåãMSSQLã®ã¯ãšãªã¯ç°ãªããŸãã
SELECT id, data FROM simple_table;
ç¹°ãè¿ããŸãããçŸæç¹ã§ã¯ããã·ã¥ããŠã³ã¯WHEREã«å¯ŸããŠã®ã¿æ©èœããŸãã JOINãORDERãããã³MAXãLOWERãªã©ã®ãã®ä»ã®é¢æ°ã§ã¯ãèµ·åããŸããã
ãããŠãã1ã€ãMSSQLåŽã§å®éã«å®è¡ãããã¯ãšãªãã©ã®ããã«ç¥ãã®ã§ããããã ããšãã°ãMySQLã«FDWã䜿çšãããšãexplainã«æ¬¡ã®è¡ã衚瀺ãããŸãã
Remote query: SELECT `id`, `customer_id`, `order_date` FROM `data`.`orders`
ãããŠäŸ¿å©ã§ãã tds_fdwã§ã¯ãããã¯ãŸã ã§ã¯ãªããFreeTDSãã°ãããé·ã調ã¹ãå¿ èŠããããŸãã ããã©ã«ãã§ã¯ãFreeTDSã®ãã°ã¯ç¡å¹ã«ãªã£ãŠããŸãããããã¯/etc/freetds/freetds.confã調ã¹ãããšã§ç°¡åã«ä¿®æ£ã§ããŸãã ããã§ãããã®è¡ãèŠã€ããããšãã§ããŸãïŒ
; dump file = /tmp/freetds.log ; debug flags = 0xffff
æåã«ã»ãã³ãã³ãåé€ããå¿ èŠããããŸãã
ããã§ãPGããã®MSSQLã§ã®ã¯ãšãªã«å¯ŸããŠãFreeTDSã¯å¯èœãªéããã¹ãŠã®ãã°ãèšé²ããŸãã ããã«ããããã¹ãŠã®å€éšãªã¯ãšã¹ãã®å®è¡ãé ããªãã倧éã®ãã°ãçæãããå¯èœæ§ããããŸãïŒç§ã®å Žåãéåžžã®SELECTã®ãã°ã¯çŽ300MBã§ãJOINã¯ãããã«çŽ1.5GBã«çµã蟌ãŸããŠããŸãïŒã ãã ãããã°ã§ã¯ãMSSQLã§å®éã«å®è¡ãããããšã確èªã§ããŸãã ããã«ãããããã°ãã©ã°ãã§éã¶ããšã§ãã°ã®éãæžããããšãã§ããŸãã FreeTDS ã§ã®ãã®ã³ã°ã®è©³çŽ°ã«ã€ããŠã¯ãã¡ãã ãããããã°ãã©ã°ãã®è©³çŽ°ã«ã€ããŠã¯ãã¡ããã芧ãã ãã ã
ãããªã¢ã©ã€ãºããã¥ãŒ
ãããªã¢ã©ã€ãºããã¥ãŒ ïŒä»¥éMVïŒã¯ãéåžžã®ãã¥ãŒ+ããŒã¿ããŒãã«ã§ãã ãã®ã¢ãããŒãã¯ãå€éšããŒãã«ãšå éšããŒãã«ã®çµåãé¢æ°ãèšå®ãé女ãªã©ã®è€éãªã¯ãšãªã®å Žåã«åœ¹ç«ã¡ãŸãã
MVã®å©çã¯æ¬¡ã®ãšããã§ããPGã®ããã€ãã£ãããªããžã§ã¯ãã§ããã€ãŸããMVã¯PostgreSQLã®æ®ãã®éšåãšçŽ æŽãããçžäºäœçšããããŒã¿ãœãŒã¹ã«é¢ä¿ãªãã€ã³ããã¯ã¹ãäœæããŠåæã§ããŸãã çæïŒMVãæŽæ°ããå¿ èŠããããŸãã å éšããªã¬ãŒãå€éšã€ãã³ããå®å šã«åäœæãªã©ã«ãã£ãŠæŽæ°ã§ããŸãã ãããããããã«ãããMVã¯PGãå ã®ããŒã¿ãœãŒã¹ãããé ããããŸãã
äžèšã®å€éšããŒãã«MVã®å Žåã次ã®ããã«äœæã§ããŸãã
CREATE MATERIALIZED VIEW materialized_mssql_table AS SELECT id, custom_data FROM mssql_table;
ããã§ãMSSQLããã®ãã¹ãŠã®ããŒã¿ã¯PostgreSQLã«æ ŒçŽãããŸããã€ãŸãã B-tree ã GINãGiSTãªã©ã奜ããªããã«ã€ã³ããã¯ã¹ãäœæã§ãã çµ±èšãå©çšå¯èœã«ãªããŸãã
æšæºã®INCERT / UPDATE / DELETEã³ãã³ãã䜿çšããŠMVãæŽæ°ããããåã«æ¬¡ã䜿çšããŠãã¹ãŠã®ã³ã³ãã³ããåäœæã§ããŸãã
REFRESH MATERIALIZED VIEW CONCURRENTLY materialized_mssql_table;
CONCURRENTLYãªãã·ã§ã³ã䜿çšãããšã競åããèªã¿åãèŠæ±ããããã¯ããã«MVãæŽæ°ã§ããŸãããããå€ãã®æéãšãªãœãŒã¹ãå¿ èŠã§ãã ãŸããCONCURRENTLYã䜿çšããã«ã¯ãã¿ãŒã²ããMVãããã€ãã®èŠä»¶ãæºãããŠããå¿ èŠããããŸãã ãããã¯ã 察å¿ããããã¥ã¡ã³ãã®ããŒãžã§èŠã€ããããšãã§ããŸã ã
ãšããŸããã¯ãªã¢ãããŒã
æ£çŽãªãšãããæªéã¯ãã®ã¢ãããŒããããŸããããã©ãããç¥ã£ãŠããŸãããããããå°æ¬ãããŠãã倧è¡ã¯ãã®äž»é¡ã«ã€ããŠäœãé¢çœãããšãèšãã§ãããã ãããã«ããã2ã€ã®ããŒã¿ããŒã¹ã®çµ±åã«é¢ãã質åã®ã»ãšãã©ãã³ã¢ãªãœãŒã¹ã§ãFDWã䜿çšããããšåçãããŠãããå¥åŠãªãã®ãå¿ èŠãªå Žåã§ããå€æ§æ§ã¯æåŸ ãããªããããããã«ã€ããŠèšãå¿ èŠããããšæããŸãã
ãã®ãããå¿ èŠãªå ŽåïŒäžèšã®ãã¹ãŠã®ãªãã·ã§ã³ãããŸããŸãªå¶éã®ããã«åœ¹ã«ç«ããªãã£ãå Žåã äŸïŒ
- 倧éã®å€éšããŒã¿ããŒã¹ãšPGã§ã®ã¯ããŒãã³ã°ã®äžå¯èœæ§ã
- å³æ Œãªããã©ãŒãã³ã¹èŠä»¶ãšå€éšããŒã¿ããŒã¹ãžã®æé©ãªã¯ãšãªã®å¯çšæ§ã
- ãã©ã¡ãŒã¿åãããã¯ãšãªãã€ãŸãFDWã®ã¯ãšãªãªãã·ã§ã³ã«é¡äŒŒããåçãã©ã¡ãŒã¿ã®ã¿ãå®è¡ãããå Žåãããšãã°ã CONTAINSé¢æ°ãä»ããŠMSSQLåŽã§ãã«ããã¹ãæ€çŽ¢ã䜿çšãããå Žåã
- äœãä»ã®çããã
䜿çšãããã®ïŒ dbi-linkãŸãã¯dblink-tds ãããã¯dblinkã«é¡äŒŒããŠããŸãããdbi-linkã®å Žåã¯PostgreSQLãMySQLãMSSQL ServerãOracleãdblink-tdsã®å Žåã¯TDSã®ã¿ã®ããã€ãã®DBMSããµããŒãããŠããŸãã
ä»äºã®ä»çµã¿ãèŠãããŸãïŒæž¡ãããåŒæ°ã«åºã¥ããŠå¿ èŠãªã¯ãšãªãå éšã§åéããäžèšã®ããŒã«ãä»ããŠå€éšããŒã¿ããŒã¹ã§å®è¡ããããŒã¿ãåä¿¡ããåŠçããŠãã€ãã©ã€ã³é¢æ°ãšããŠPGã«è¿ãPGé¢æ°ã®åœ¢åŒã®FDWã®äžçš®ã®éåžžã«ç¹æ®ãªã¢ããã°ãšããŠã ã€ãŸãã仮説çã«ã¯ãåžæããèŠæ±ãæ£ç¢ºã«æºããããã®çµæãPGã§ã®åŸç¶åŠçã®ããã«æ¶åå¯èœãªåœ¢åŒã§æ瀺ããããšãå¯èœã§ãã
äžèšã¯ãã¹ãŠãçŽç²ãªçè«çèæ ®äºé ã§ãã ãããã®ããŒã«ãŸãã¯é¡äŒŒã®ããŒã«ãå®éã«äœ¿çšããçµéšãããå Žåã¯ãç¥èãäžçäžã®äººãšå ±æããŠãã ããã
ãããã«
çŸæç¹ã§ã¯ãPostgreSQLãšMSSQLãçµåããããã®å¯äžã®ã·ã³ãã«ã§å®çšçãªãœãªã¥ãŒã·ã§ã³ããããŸãã ããã¯tds_fdwã§ãã å€ãã®æ¬ ç¹ããããŸããããããžã§ã¯ãã¯éçºäžã§ããããã°ã¯ä¿®æ£ãããæ©èœã¯ããŒã«ã¢ãŠããããŠãããçŽ æŽãããã§ãã ãããã£ãŠãtds_fdwã¯ãPGãä»ããŠMSSQLããããŒã¿ãååŸããããšã«é¢é£ããåé¡ã®ã»ãšãã©ã解決ã§ããŸãã è¿ éãã€æé©ã«ãé女ãšäžç·ã«ãããã人ã¯ãPostgreSQLãšãã®è±å¯ãªæé©åããŒã«ãæäŒãã§ãããã ãããŠãéåžžã«å¥åŠãªäœããæã¿ãæå°éã®å€éšãµãŒãã¹ã§ããŒã¿ããŒã¹å ã®ãã¹ãŠãå®è¡ããã人ã¯ãã€ãå¿ èŠããããŸãã ãã®ããŒã«ãããã¯å€ããããã¥ã¡ã³ãããµããŒãããããŸãããããŒã«ãããã¯