Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PostgreSQL を使った快適な go test 環境を求めて

PostgreSQL を使った快適な go test 環境を求めて

Go Conference mini in Sendai 2026

The Go gopher was designed by Renée French.

Avatar for Kotaro Otaka

Kotaro Otaka

February 21, 2026
Tweet

More Decks by Kotaro Otaka

Other Decks in Programming

Transcript

  1. Th e G o go pher was des igned by

    Renée French . P o s t g r e S Q L ™ c _ ë i j g o t e s t ° … ™ B † f Jü_KSü_“ü / @o taka kot 202 6 . 02.21 Go Con feren ce mini 2 0 26
  2. # s e n d a i g o SQ

    L êá B−~Y K˜
  3. # s e n d a i g o ORM

    nˇ Õ−ágMf ~YK˜
  4. # s e n d a i g o Áo

    êá LB− ~ [fi.. .
  5. # s e n d a i g o go

    t e st g Po s t g r e SQL ™D _D. ..!! !
  6. g o t e s t g P o s

    t g r e S Q L ™ ) ( Y ‰  d n ¹ Õ # s e n d a i g o
  7. # s e n d a i g o ¹⁄—kÆ

    ¹ È ™ LW_ D.. . !!!
  8. P o s t g r e S Q L

    ™ c _ g o t e s t ™ &  L ï ý k Y ‰  d n ¹ Õ # s e n d a i g o
  9. Kotaro Ota ka Jü_K S ü_ “ü / @o takakot

    # s e n d a i g o Web En gi ne er °R e> Hello Gola ng! Web En gi ne er * ˆ >ÓÃÈ ü 20 20 .04 20 21 .04 20 22 .11 Gophe r Go t˜
  10. # s e n d a i g o µó

    ×ë³ü ÉnÅk dDf
  11. # s e n d a i g o É

    é ¤ Ð ü n Å k ) ( l i b / p q o þ ( ‰ z L ‹ u — ˇ Œ n d a t a b a s e / s q l ì ê n A P I ™ Ð ł
  12. # s e n d a i g o ORM

    é¤Öéêo)( WjD
  13. # s e n d a i g o g

    o t e s t g P o s t g r e S Q L ™ ) ( Y ‰  d n ¹ Õ
  14. # s e n d a i g o Ìo

    P o s t g r e S Q L n Ë ⁄ ™ ˝ < W _ D ł k D B x h ¢ ¯ » ¹ W _ D
  15. # s e n d a i g o go

    tes t g P ostgreSQL ™) (Y ‰¹ Õ 外部起動の PostgreSQL の利用 Testcontainers の利用 embedded-postgres の利用 RamSQL の利
  16. # s e n d a i g o ÔY‰³¹

    起動 ~ 接続まで マイグレーション PostgreSQL のバージョン管理 CI 環
  17. # s e n d a i g o Æ

    ¹ È  g B › K X † w Õ û - ı U „ _ µ ü Ð ü k ¥ ı Y ‰  Å L · ó × ë g í ü « ë g n L ˜ ¦ L ˜ D K Õ
  18. # s e n d a i g o co

    nne ct close te st Postg r e SQL go te s t L L
  19. # s e n d a i g o ;

    GitHub oßéüêݸÈê ª ü × ó ½ ü ¹ n R D B M S í ü « ë o ³ ó Æ Ê g w Õ Y ‰ n L , — ˜ ˇ Œ S Q L x n Œ à ¦ L Ø D
  20. co nne ct close te st Postg r e SQL

    go te s t L L # s e n d a i g o wÕ ~ ¥ ı ~g ° … p j i g - ı W _ P o s t g r e S Q L n Å 1 ™ ! Y ` Q
  21. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  22. co nne ct close te st Postg r e SQL

    go te s t L L # s e n d a i g o Þ¤° ìü·ç ó ° … Ë É B k ½  D o c k e r g B „ p d o c k e r - e n t r y p o i n t - i n i t d b . d ™ ) ( ï ý
  23. co nne ct close te st Postg r e SQL

    go te s t L »ÃÈ¢Ã× # s e n d a i g o Postg re SQL nÐü¸çó¡  D o c k e r C o m p o s e ™ ) ( W f D ‰ 4  o ( c o m p o s e . y a m l Õ ¡ ¤ ë g  ı ï ý
  24. co nne ct close te st Postg r e SQL

    go te s t L »ÃÈ¢Ã× # s e n d a i g o Postg re SQL nÐü¸çó¡  P o s t g r e S Q L n ê ê ü ¹ µ ¤ ¯ ë k Ü X f ( ° n Ð ü ¸ ç ó L ) ( ï ý
  25. Gi tHu b Ac ti ons co nne ct close

    te st Postg r e SQL go te s t # s e n d a i g o CI °… »ÃÈ¢Ã× P o s t g r e S Q L n w Õ J ‹ s Þ ¤ ° ì ü · ç ó ™ ‰ M k ½
  26. # s e n d a i g o G

    o ³ ü É K › D o c k e r ³ ó Æ Ê ™ ô ¥ 6 ¡ W  ° … k Ñ D „ h j ™ Û ' h ê Õ ¯ ê ü ó ¢ Ã × ™ þ Y ‰ K Õ
  27. # s e n d a i g o cloud

    co nne ct star t im age pu ll clea nup Postg r e SQL cont ainer go te s t L mi grati on close te st
  28. # s e n d a i g o D

    o c k e r ³ ó Æ Ê ™ G o g 6 ¡ D o c k e r D e s k t o p , O r b S t a c k e t c . . . , i n ³ ó Æ Ê ™ ) ( ï ý
  29. wÕ ~ ¥ ı ~g # s e n d

    a i g o cloud co nne ct star t im age pu ll clea nup Postg r e SQL cont ainer go te s t L mi grati on close te st P o s t g r e S Q L ™ w Õ Y ‰ _ † n A P I L (  U „ f D ‰ n g ] „ ™ ) ( postgres.Run() 関数で起 接続情報をConnectionString() メソッ
  30. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  31. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  32. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  33. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  34. Þ¤° ìü·ç ó # s e n d a i

    g o cloud co nne ct star t im age pu ll clea nup Postg r e SQL cont ainer go te s t L mig rati on close te st W i t h I n i t S c r i p t s ( ) ¢ p k ( D D L Õ ¡ ¤ ë x n Ñ ¹ ™ ! W L
  35. # s e n d a i g o cloud

    co nne ct star t im age pu ll clea nup Postg r e SQL cont ainer go te s t L mig rati on close te st Postg re SQL nÐü¸çó¡  ³ ó Æ Ê L  ı g M ‰ n g P o s t g r e S Q L n ê ê ü ¹ µ ¤ ¯ ë k Ü X f ° n Ð ü ¸ ç ó L ) ( ï ý
  36. # s e n d a i g o cloud

    co nne ct star t im age pu ll clea nup Postg r e SQL cont ainer go te s t mig rati on close te st CI °… Æ ¹ È ³ ü É g w Õ U „ ‰ _ † ‰ M Œ Ž † Gi tHu b Ac tions
  37. # s e n d a i g o L

    B k P o s t g r e S Q L n Ð ¤ Ê ê ™ ê Õ g À ¦ ó í ü É û w Õ Y ‰ _ †  D o c k e r é ó ¿ ¤ à L j D ° … g ‡ D B Æ ¹ È L g M ‰ K Õ
  38. # s e n d a i g o Postg

    r e SQL bi na ry go te s t L co nne ct star t clea nup mi grati on close te st cloud b i n a r y d o w n l o a d
  39. # s e n d a i g o ,

    i n P o s t g r e S Q L ™  è š X j W g w Õ G o å  n ° … t Ž L † ý Ï j P o s t g r e S Q L Ð ¤ Ê ê ™ ) (
  40. # s e n d a i g o ý

    Ï j P o s t g r e S Q L Ð ¤ Ê ê M  J a v a I n Æ ¹ È L k ‡ ) ( U „ f D ‰  1 0 M B ¦ ~ g µ ¤ º ™ ' .
  41. # s e n d a i g o Postg

    r e SQL bi na ry go te s t L co nne ct star t clea nup mi grati on close te st cloud b i n a r y d o w n l o a d wÕ ~ ¥ ı ~g P o s t g r e S Q L ™ w Õ Y ‰ _ † k A P I L (  U „ f D ‰ n g ] „ ™ ) ( ¥ıÅ1 ™ Co nfig K›ÖŠ
  42. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  43. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  44. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  45. # s e n d a i g o Þ¤°

    ìü·ç ó Postg r e SQL bi na ry go te s t L co nne ct star t clea nup mi grati on close te st cloud b i n a r y d o w n l o a d é ¤ Ö é ê h W f n _ ý Ð ł o j D n g ê M g Õ D ™ (  Y ‰ Å † B −
  46. # s e n d a i g o Postg

    r e SQL bi na ry go te s t L co nne ct star t clea nup mi grati on close te st cloud b i n a r y d o w n l o a d Ð ü ¸ ç ó L Ï ü É ³ ü É U „ f D ‰ á ¸ ã ü Ð ü ¸ ç ó o x ž ï ý ` L Þ ¤ Ê ü — Ñ Ã Á Ð ü ¸ ç ó o  ı ï Postg re SQL nÐü¸çó¡ 
  47. # s e n d a i g o Postg

    re SQL nÐü¸çó¡  emb edded - p os t gres / conf ig .g o
  48. # s e n d a i g o Postg

    re SQL nÐü¸çó¡ 
  49. # s e n d a i g o Postg

    r e SQL bi na ry go te s t co nne ct star t clea nup mi grati on close te st cloud b i n a r y d o w n l o a d CI °… Æ ¹ È ³ ü É g w Õ U „ ‰ _ † ‰ M Œ Ž † Gi tHu b Ac ti ons
  50. # s e n d a i g o ¤

    ó á â ê g Õ \ Y ‰ P o s t g r e S Q L ™ Û n S Q L ¨ ó ¸ ó ™ ) ( W   è š X ™ ™ d W f u † f Ø ˜ k Æ ¹ È ™ L g M ‰ K Õ
  51. # s e n d a i g o go

    test In Me m o ry L star t co nne ct mi gr ati on test close
  52. # s e n d a i g o Æ

    ¹ È ¹ ¤ ü È  ( k -  þ ( ‡ ‰ z - ³ − j D _ ý ‡ . . . d a t a b a s e / s q l k Œ à W _ É é ¤ Ð ü
  53. # s e n d a i g o wÕ

    ~ ¥ ı ~g go test In Me m o ry L star t co nne ct mi gr ati on test close Öéó¯¤óÝüÈkf¥ı
  54. # s e n d a i g o wÕ

    ~ ¥ı~gn Å
  55. # s e n d a i g o Þ¤°

    ìü·ç ó go test In Me m o ry L star t co nne ct mi gr ati on test close é ¤ Ö é ê h W f n _ ý Ð ł o j D n g ê M g Õ D ™ (  Y ‰ Å † B −
  56. # s e n d a i g o Postg

    re SQL nÐü¸çó¡  go test In Me m o ry L star t co nne ct mi gr ati on test close Post greS QL nÐü¸ çóµÝüÈjW
  57. # s e n d a i g o CI

    °… go test In Me m o ry star t co nne ct mi gr ati on test close ƹ ȳ üÉgw Õ U„‰_†‰ MŒŽ † Gi tHu b Ac ti ons
  58. # s e n d a i g o Ñ¿üó

    y´ èw Õ Æ¹ ȳüÉ L‡c h‡· ó×ë Testc onta in ers ³óÆ Ê n)( k‹− Æ¹È g„P emb edd ed-po st g res Ð¤Ê ê n)( k‹− Æ¹È g„P ramsql ‡ch ‡ ؘ` L„h ™Ûg ojD
  59. # s e n d a i g o Â$

    ˆÑ Õ ©üÞó¹Ô テスト開始 PostgreSQL 起動 PostgreSQL 接続 テスト終
  60. # s e n d a i g o í

    ü « ë L ˜ ¦ ˆ A p p l e M 1 M a c g o t e s t ‰ Ë K › B ƒ ; C o r e s : 8 ( 4 p e r f o r m a n c e a n d 4 e f f i c i e n c y ) ( ; M e m o r y : 1 6 G B e m b e d d e d - p o s t g r e s ~ 12 s Test c o n t ai n ers ~ 4 s èwÕ ~ 0. 4 s ra msql ~ 0. 3 s Rosett a 2 nqÿ ? ?
  61. # s e n d a i g o C

    I L ˜ ¦ ˆ u b u n t u - 2 4 . 0 4 ( 4 C P U 1 6 G B ) G i t H u b A c t i o n s ‰ Ë K › B ƒ èwÕ ~ 39 s Test c o n t ai n ers ~ 27 s e m b e d d e d - p o s t g r e s ~ 20 s ra msql ~ 15 s
  62. # s e n d a i g o P

    o s t g r e S Q L ™ c _ g o t e s t ™ &  L ï ý k Y ‰  d n ¹ Õ
  63. # s e n d a i g o Ìo

    Æ ¹ È n Ø ˜  ™ î  W &   Æ ¹ È ± ü ¹ L r W Õ ê ü ü
  64. # s e n d a i g o ‰Hp.

    .. データの作成 データの取得 データの削
  65. # s e n d a i g o ‰Hp.

    .. テストデータリセットによる対象の消失 テストデータ過多による比較の失
  66. # s e n d a i g o &Lïý

    kY‰¹ Õ 並列実行は諦める 複数 PostgreSQL の利用 複数データベースの利用 トランザクションの利
  67. # s e n d a i g o ÔY‰³¹

    テストコード Pros Con
  68. # s e n d a i g o t

    . P a r a l l e l ( ) ™ ( [ Z   Æ ¹ È n M „ g Æ ü Ö ë ™ h J d W f  j k L Y ‰ ‡ · ó × ë j K Õ
  69. # s e n d a i g o TR

    UN CA TE TRUNC ATE TRU NCATE Postg r e SQL go test A go t est B go te st C
  70. # s e n d a i g o TR

    UN CA TE TRUNC ATE TRU NCATE Postg r e SQL go test A go t est B go te st C èg Pos tgreS QL ™ wÕW fJ O Æ ¹ È L B fi L  k j › j D n g B „ p S n Ñ ¿ ü ó g A  ‡†
  71. # s e n d a i g o ƹȳüÉ

    t.Paral lel ( ) o‘jD t . C l e a n u p g T R U N C T A T E ™ L
  72. # s e n d a i g o TR

    UN CA TE TRUNC ATE TRU NCATE Postg r e SQL go test A go t est B go te st C Æ ¹ È ( k (  Y ‰ Õ D L Ç ü ¿ ê » Ã È n Å L·ó ×ë Pr os
  73. # s e n d a i g o TR

    UN CA TE TRUNC ATE TRU NCATE Postg r e SQL go test A go t est B go te st C Co ns ƹ Èpk Ô‰Wf LBfiLŠ€.. .
  74. # s e n d a i g o 複数

    PostgreSQL の利
  75. # s e n d a i g o T

    e s t c o n t a i n e r s I ™ ( D f Æ ¹ È ± ü ¹ T h k % n P o s t g r e S Q L ™ w Õ W  „ h k fl â U „ _ ° … ™ Ë É Y ‰ K Õ
  76. # s e n d a i g o Postg

    r e SQL Postg r e SQL Postg r e SQL go t est B go t est C go test A C r e a t e P o s t g r e s D e l e t e P o s t g r e s
  77. # s e n d a i g o Postg

    r e SQL Postg r e SQL Postg r e SQL go t est B go t est C go test A C r e a t e P o s t g r e s D e l e t e P o s t g r e s ‡† T e s t c o n t a i n e r s — e m b e d d e d - p o s t g r e s ™ c f ( P o s t g r e S Q L ™ Æ ¹ È T h k w Õ
  78. # s e n d a i g o ƹȳüÉ

    Testc onta ine rs ™)( ³óÆ ÊTh4Ä
  79. # s e n d a i g o Postg

    r e SQL Postg r e SQL Postg r e SQL go t est B go t est C go test A C r e a t e P o s t g r e s D e l e t e P o s t g r e s Pr os Æ ¹ È ° … ™ „ h k  â Y ‰ S h g { K n Æ ¹ È n q ÿ ™ „ h k n
  80. # s e n d a i g o Postg

    r e SQL Postg r e SQL Postg r e SQL go t est B go t est C go test A C r e a t e P o s t g r e s D e l e t e P o s t g r e s ª ü Ð ü Ø Ã É L ' M O Æ ¹ È ¹ ¤ ü È h S n L ‡ w O j ‰ ï ý ' ‡ . . . Co ns
  81. # s e n d a i g o n

    P o s t g r e S Q L ¤ ó ¹ ¿ ó ¹ – g  Æ ¹ È T h k C R E A T E D A T A B A S E g ì Ë W _ Ç ü ¿ Ù ü ¹ ™ \  W ¥ ı H ™  â
  82. # s e n d a i g o Po

    st gr eSQ L go te st B go te st C go te st A C R E A T E D A T A B A S E D R O P D A T A B A S E
  83. # s e n d a i g o Po

    st gr eSQ L go te st B go te st C go te st A C R E A T E D A T A B A S E D R O P D A T A B A S E ‡† èg Pos tgreS QL ™ wÕW fJ O Æ ¹ È T h k  j M g C R E A T E D A T A B A S E ™ L Æ ¹ È „ o D R O P D A T A B A S E g 4 Ä
  84. # s e n d a i g o ƹȳüÉ

    CR EATE DA TAB ASE DR OP DAT AB ASE
  85. # s e n d a i g o Po

    st gr eSQ L go te st B go te st C go te st A C R E A T E D A T A B A S E D R O P D A T A B A S E Pr os Æ ¹ È Ç ü ¿ n ê » Ã È ™ Ç ü ¿ Ù ü ¹ n 4 Ä g L ï ý
  86. # s e n d a i g o Po

    st gr eSQ L go te st B go te st C go te st A C R E A T E D A T A B A S E D R O P D A T A B A S E Co ns Æ ¹ È ( k C R E A T E D A T A B A S E / Þ ¤ ° ì ü · ç ó D R O P D A T A B A S E n Õ D L Å † k j ‰
  87. # s e n d a i g o 

    Æ ¹ È ™ È é ó ¶ ¯ · ç ó – g L W f B ƒ B k í ü ë Ð Ã ¯ Y ‰ S h g Ç ü ¿ ™ ê » Ã È W f r ™ 2 P K Õ
  88. # s e n d a i g o Po

    stg re SQL go tes t B go tes t C go test A RO LLB AC K BEGI N
  89. # s e n d a i g o Po

    stg re SQL go tes t B go tes t C go test A RO LLB AC K BEGI N ‡† èg Pos tgreS QL ™ wÕW fJ O Æ ¹ È · Ê ê ª ™ B E G I N g ‰ Ë Æ ¹ È „ o R O L L B A C K g 4 Ä
  90. # s e n d a i g o ƹȳüÉ

    Èéó¶ ¯·çó™ ‰Ë ROL LBA CK gê »ÃÈ
  91. # s e n d a i g o RO

    LLB AC K Po stg re SQL go test B go test C go test A BEGI N Pr os Æ ¹ È Ç ü ¿ n ê » Ã È ™ í ü ë Ð Ã ¯ æ  g L ï ý
  92. Po stg re SQL go test B go test C

    go test A BEGI N # s e n d a i g o ¢ × ê ± ü · ç ó ³ ü É n Å ! , g o È é ó ¶ ¯ · ç ó ™ ) ( Y ‰ _ † k Æ ¹ È ³ ü É g å + L Å † Co ns
  93. # s e n d a i g o &

    ÅÔ ~h†
  94. # s e n d a i g o Ñ¿üó

    y´ ô L ‡c h‡·ó×ëj Å Pos tgr eSQL & „hkflâW_°…™ËÉ Çü¿ Ùü¹ & ìËW_Çü¿Ùü¹™ËÉ Èéó¶ ¯·ç ó) ( ACID y ' ™)(W_â
  95. # s e n d a i g o Po

    st greSQ L ) (Ô
  96. # s e n d a i g o Ñ¿üó

    y´ èw Õ Æ¹ ȳüÉ L‡c h‡· ó×ë Testc onta in ers ³óÆ Ê n)( k‹− Æ¹È g„P emb edd ed-po st g res Ð¤Ê ê n)( k‹− Æ¹È g„P ramsql ‡c h‡Ø˜ `L™ Û'L OWD
  97. # s e n d a i g o Ñ¿üó

    y´ ô L ‡c h‡·ó×ëj Å Pos tgr eSQL & „hkflâW_°…™ËÉ Çü¿ Ùü¹ & ìËW_Çü¿Ùü¹™ËÉ Èéó¶ ¯·ç ó) ( ACID y ' ™)(W_â
  98. # s e n d a i g o S

    „ › n Ñ ¿ ü ó ™ D  ‘ [ f ë i j Æ ¹ È ˜ ; ™
  99. # s e n d a i g o JKjD

    ‘[ èwÕ Ç ü ¿ Ù ü ¹  r
  100. # s e n d a i g o ‘!g·ó

    ×ëj Å RamSQL ô L
  101. # s e n d a i g o Doc

    ker †g C I ™·ó×ëk e m b e d d e d - p o s t g r e s Èéó¶ ¯ · çó