{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":645459442,"defaultBranch":"main","name":"pgtestdb","ownerLogin":"peterldowns","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-05-25T17:46:53.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/824173?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1712249369.0","currentOid":""},"activityList":{"items":[{"before":"d942f838c90b2ff87f420c4a2e581eac4273ae8f","after":"4a2e20820f4efe1e4464443192dfa97af1d99f72","ref":"refs/heads/main","pushedAt":"2024-05-26T16:04:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"docs: fix typos","shortMessageHtmlLink":"docs: fix typos"}},{"before":"15a8a8ad397733d23ec97d6bdfab9bf4b3f9d5af","after":"d942f838c90b2ff87f420c4a2e581eac4273ae8f","ref":"refs/heads/main","pushedAt":"2024-04-04T16:55:48.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"tests: ignore artifact generated during dbmatemigrator test","shortMessageHtmlLink":"tests: ignore artifact generated during dbmatemigrator test"}},{"before":"73740562e17317a5f50cf0376243b93e37e362b9","after":"15a8a8ad397733d23ec97d6bdfab9bf4b3f9d5af","ref":"refs/heads/main","pushedAt":"2024-04-04T16:53:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"bug: only use one db connection at any point in time\n\nI've fixed the implementation of `create()` to only use a single database connection at any point in time — previously, as @ebabani pointed out in #5, pgtestdb used 2 simultaneous connections. I was able to verify the behavior by adding some `time.Sleep` calls in the library and then connecting to the test database while running some tests:\r\n\r\n
\r\n Now, when you call `pgtestdb.New()` or `pgtestdb.Custom(0`, pgtestdb connects, ensures the template exists, creates the instance db, then cleans everything up like before, but only uses a single connection to the server at any point in time.\r\n\r\n* Here, you see a single active connection to the `postgres` database to start (that's me connected in `psql`.) \r\n```psql\r\npostgres=# SELECT datname, sum(numbackends) FROM pg_stat_database WHERE datname is not null group by 1;\r\n datname | sum\r\n---------------------------------------------+-----\r\n postgres | 1\r\n template0 | 0\r\n template1 | 0\r\n```\r\n* I start running a test. `pgtestdb` connects to the `postgres` database as well, this is the `baseDB` in the code. It uses this connection to create the template database, run migrations, and then create the instance database for the specific test.\r\n```psql\r\npostgres=# SELECT datname, sum(numbackends) FROM pg_stat_database WHERE datname is not null group by 1;\r\n datname | sum\r\n---------------------------------------------+-----\r\n postgres | 2\r\n template0 | 0\r\n template1 | 0\r\n```\r\n* `pgtestdb` connects to the instance database, then hands it to the test. this is the `db := pgtestdb.New(...)` connection.\r\n```psql\r\npostgres=# SELECT datname, sum(numbackends) FROM pg_stat_database WHERE datname is not null group by 1;\r\n datname | sum\r\n-----------------------------------------------------------------+-----\r\n template1 | 0\r\n testdb_tpl_ed8ae75db1176559951eadb85d6be0db_inst_8ed74b29d41d8c | 1\r\n postgres | 1\r\n testdb_tpl_ed8ae75db1176559951eadb85d6be0db | 0\r\n template0 | 0\r\n```\r\n* The test case finishes, and `pgtestdb` closes the connection to the instance, connects back to the `baseDB`, and deletes the instance.\r\n```psql\r\npostgres=# SELECT datname, sum(numbackends) FROM pg_stat_database WHERE datname is not null group by 1;\r\n datname | sum\r\n---------------------------------------------+-----\r\n postgres | 2\r\n testdb_tpl_ed8ae75db1176559951eadb85d6be0db | 0\r\n template0 | 0\r\n template1 | 0\r\n```\r\n* `pgtestdb` closes its connection, the test is entirely finished running.\r\n```psql\r\npostgres=# SELECT datname, sum(numbackends) FROM pg_stat_database WHERE datname is not null group by 1;\r\n datname | sum\r\n---------------------------------------------+-----\r\n postgres | 1\r\n testdb_tpl_ed8ae75db1176559951eadb85d6be0db | 0\r\n template0 | 0\r\n template1 | 0\r\n```\r\n
\r\n\r\nIn my testing, re-connecting to the database adds some slight overhead per test, but it's fundamentally more correct, and the database connection time should be dominated by the time taken during each test so overall this is worth the performance impact because it allows you to double the amount of tests you are running at once!\r\n\r\nI also updated the FAQ to explain the problem, show some example error messages, and provide some ideas for how to work around it.\r\n\r\nCo-authored-by: Peter Downs ","shortMessageHtmlLink":"bug: only use one db connection at any point in time"}},{"before":"1760483a72f8f4c84c9514d7e294f6c61eb6fb7f","after":null,"ref":"refs/heads/eb/cleanup-basedb-connection","pushedAt":"2024-04-04T16:49:29.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"}},{"before":null,"after":"1760483a72f8f4c84c9514d7e294f6c61eb6fb7f","ref":"refs/heads/eb/cleanup-basedb-connection","pushedAt":"2024-04-04T16:46:19.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"version: v0.0.14","shortMessageHtmlLink":"version: v0.0.14"}},{"before":"80800140529f9b0bfcee7e79fcc99f9b614cd4f5","after":"73740562e17317a5f50cf0376243b93e37e362b9","ref":"refs/heads/main","pushedAt":"2024-04-04T16:39:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: custom role capabilities for pgtestdb user (#6)\n\n[kodergarten](https://kodergarten.com/) [forked\r\npgtestdb](https://github.com/kodergarten/pgtestdb) just [to alter the\r\nrole that is used to create the\r\ndatabases](https://github.com/kodergarten/pgtestdb/commit/12d6d218d2a7f82805f4878f2c26add2373a0ed9)\r\nto be `SUPERUSER` so that they can install\r\n[postgis](https://hub.docker.com/r/postgis/postgis) in a migration,\r\nwhich requires superuser privileges.\r\n\r\nI [checked with their\r\nteam](https://github.com/kodergarten/pgtestdb/issues/17) and they'd be\r\ninterested in having support for this mainlined.\r\n\r\n## This PR\r\n\r\n### feature changes\r\n\r\n* Adds constants for the username, password, and capabilities that are\r\nused to create the pgtestdb role by default.\r\n* Allows defining a custom `Role` that would be created instead.\r\n\r\n### test changes\r\n* Tests that this would allow installing postgis by running tests\r\nagainst the `postgis/postgis` docker image.\r\n* Tests that the default behavior does not change from previous versions\r\nof pgtestdb.\r\n\r\n### docs changes\r\n* Updates the documentation to explain how the default role is used and\r\ncan be overridden.\r\n\r\n### implementation changes\r\n\r\n* pgtestdb previously assumed a single role would be used, and cached\r\nthe result of the \"get-or-create\" sql commands so that it would only\r\never run them once per test-package. Now, because multiple roles with\r\nmultiple capabilities can be used in different tests in the same\r\npackage, it caches the results with the `Role.Username` as the cache\r\nkey.\r\n* Functions accept a new `TB` interface that is a subset of `testing.TB`\r\nto make it easier to \"check that a bad migration would cause the tests\r\nto fail\".\r\n\r\n### additional improvements\r\n\r\n* The nix dev shell is upgraded to include newer versions of all\r\ndevelopment tools, motivated by wanting to upgrade to a newer version of\r\n`gopls`.\r\n* Subsequent fixes to the linting configuration: `depguard` has been\r\nremoved.\r\n* Minor bugfixes in the migrator used in tests, wasn't causing any\r\nissues but the new linters detected two places where a session lock was\r\nacquired but subsequent statements were executed in separate connection\r\nfrom the one that had acquired the lock. This has no impact on\r\ncorrectness, but helps reduce the number of connections in use when\r\nrunning this package's tests. This has no impact on resource consumption\r\nfor people who use this library.\r\n* The Justfile `test-all` command now allows passing arguments,\r\nmotivated by wanting to pass `-count=1` to re-run all the tests and\r\nignore cached results.\r\n\r\n\r\n## What to do about `Prepare()`?\r\n\r\nThis work raises the question: shouldn't the `Prepare()` method from the\r\n`Migrator` interface have allowed for this? It was originally envisioned\r\nas the way to run admin-commands and install extensions as a superuser,\r\nseparately from running migrations. But as kodergarten noticed, and I\r\nrealized as a result:\r\n\r\n* `Prepare()` connects to the template database with the same role that\r\nis used to run the migrations and connect to each test database.\r\n* This means that if your app runs as `NOSUPERUSER` in production (which\r\nit should), and your pgtestdb config connects to its tests with the same\r\npermissions (which it should), you can't install extensions.\r\n* In the described situation, in production you would install postgis by\r\nconnecting manually as a superuser and running `CREATE EXTENSION\r\npostgis;`.\r\n* In the described situation, in tests you just cannot install the\r\npostgis extension.\r\n* `Prepare()` is still useful for installing extensions and running\r\ncommands that you need to run that haven't been committed to migration\r\nfiles, but it can only ever run commands that could also be run in a\r\nmigration.\r\n* So, basically, `Prepare()` is only useful in very select circumstances\r\n* I added it because for Pipe, there had been some statements we ran\r\nmanually when we first set up the server, and the migrations depended on\r\nthose statements having been run, and we didn't want to add a new 0001\r\nmigration and re-number all the others.\r\n\r\nThe two ideas I have for improving this situation are:\r\n\r\n* Remove the `Prepare()` method entirely from the interface. It's\r\ncurrent docstrings are misleading, remove it.\r\n * *pro* less code more good 🧠 👍 \r\n* *con* harder (impossible?) to install postgis and other superuser-only\r\nextensions.\r\n* Allow specifying capabilities that should be used only when running\r\nthe `Prepare()` method.\r\n* *pro* this would allow you to run `CREATE EXTENSION postgis` as a\r\nsuperuser in the `Prepare()` method\r\n* *pro* you could still properly restrict your test connections to be\r\n`NOSUPERUSER`, just like your production connections should be.\r\n* *con* this is more configuration, and more complexity to understand,\r\nand maybe no one needs this or cares.\r\n\r\nFor now, the goal is to solve kodergarten's problem, and is worth\r\nshipping as long as this works for them. I will continue to think about\r\nthe role structure and the migrator interface, hopefully I can come up\r\nwith something nice that solves all concerns.","shortMessageHtmlLink":"feat: custom role capabilities for pgtestdb user (#6)"}},{"before":"b58cc21b80a18df7303ba886e6d87b1582276873","after":"3368d993f1c4ad32056ead581c13a7195590902f","ref":"refs/heads/pd/role-support","pushedAt":"2024-04-03T21:13:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"version: v0.0.12 -> v0.0.13","shortMessageHtmlLink":"version: v0.0.12 -> v0.0.13"}},{"before":"1e2fe258b90fe2d1b9634da473688e6818509cf9","after":"b58cc21b80a18df7303ba886e6d87b1582276873","ref":"refs/heads/pd/role-support","pushedAt":"2024-03-31T17:30:28.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: support custom roles for superuser-only extensions like postgis","shortMessageHtmlLink":"feat: support custom roles for superuser-only extensions like postgis"}},{"before":"94f9a2ff38848b8f9c2fd399ef348c31078344a4","after":"1e2fe258b90fe2d1b9634da473688e6818509cf9","ref":"refs/heads/pd/role-support","pushedAt":"2024-03-29T17:30:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: support custom roles for superuser-only extensions like postgis","shortMessageHtmlLink":"feat: support custom roles for superuser-only extensions like postgis"}},{"before":"59b1b2e33258b8e4451bc45b7392a0395c67abb5","after":"94f9a2ff38848b8f9c2fd399ef348c31078344a4","ref":"refs/heads/pd/role-support","pushedAt":"2024-03-29T17:16:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: support custom roles for superuser-only extensions like postgis","shortMessageHtmlLink":"feat: support custom roles for superuser-only extensions like postgis"}},{"before":"11389af3e02560da4b58ee7921d4a2c939700754","after":"59b1b2e33258b8e4451bc45b7392a0395c67abb5","ref":"refs/heads/pd/role-support","pushedAt":"2024-03-29T16:40:56.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: support custom roles for superuser-only extensions like postgis","shortMessageHtmlLink":"feat: support custom roles for superuser-only extensions like postgis"}},{"before":null,"after":"11389af3e02560da4b58ee7921d4a2c939700754","ref":"refs/heads/pd/role-support","pushedAt":"2024-03-29T15:42:56.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: support custom roles for superuser-only extensions like postgis","shortMessageHtmlLink":"feat: support custom roles for superuser-only extensions like postgis"}},{"before":"80800140529f9b0bfcee7e79fcc99f9b614cd4f5","after":null,"ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T03:02:38.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"}},{"before":"753bb344279b5f4e2989aff81b9d1d71fd06b9e0","after":"80800140529f9b0bfcee7e79fcc99f9b614cd4f5","ref":"refs/heads/main","pushedAt":"2023-12-10T02:55:56.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"version: pgtestdb/migrators/* -> v0.0.12","shortMessageHtmlLink":"version: pgtestdb/migrators/* -> v0.0.12"}},{"before":"ddaf5d3452e01889d8d6ba72ac356be5923194c4","after":"80800140529f9b0bfcee7e79fcc99f9b614cd4f5","ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T02:54:32.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"version: pgtestdb/migrators/* -> v0.0.12","shortMessageHtmlLink":"version: pgtestdb/migrators/* -> v0.0.12"}},{"before":"e2e9b30b48bc4bccc7931e7da7d975e8be51e793","after":"ddaf5d3452e01889d8d6ba72ac356be5923194c4","ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T02:36:34.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: Custom supports connecting to databases via arbitrary interfaces\n\nThis change adds a new `Custom()` method that makes it easy to connect\nto the test databases via `pgx`, `pgxpool`, or any other non-`sql.DB`\ndatabase interface.\n\nAs initially suggested by @op https://github.com/op in pr #2\nhttps://github.com/peterldowns/pgtestdb/pull/2, and as requested by\n@rshep3087 https://github.com/Rshep3087 in issue #4\nhttps://github.com/peterldowns/pgtestdb/issues/4.","shortMessageHtmlLink":"feat: Custom supports connecting to databases via arbitrary interfaces"}},{"before":"752411cfcb14df0023add5e7a33b8189f0cd252a","after":"e2e9b30b48bc4bccc7931e7da7d975e8be51e793","ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T02:34:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: Custom supports connecting to databases via arbitrary interfaces\n\nThis change adds a new `Custom()` method that makes it easy to connect\nto the test databases via `pgx`, `pgxpool`, or any other non-`sql.DB`\ndatabase interface.\n\nAs initially suggested by @op https://github.com/op in pr #2\nhttps://github.com/peterldowns/pgtestdb/pull/2, and as requested by\n@rshep3087 https://github.com/Rshep3087 in issue #4\nhttps://github.com/peterldowns/pgtestdb/issues/4.","shortMessageHtmlLink":"feat: Custom supports connecting to databases via arbitrary interfaces"}},{"before":"6e3f85edbf294ef2eacebacc70bc63acdf9d1e9b","after":"752411cfcb14df0023add5e7a33b8189f0cd252a","ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T01:37:54.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"docs(readme) reference correct postgres role and password","shortMessageHtmlLink":"docs(readme) reference correct postgres role and password"}},{"before":"3c66a0e911b97ab5f3df5c8d5bc2dbf2156a8dda","after":"6e3f85edbf294ef2eacebacc70bc63acdf9d1e9b","ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T01:35:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: update New to accept testing.TB\n\nAs suggested in PR #3 https://github.com/peterldowns/pgtestdb/pull/3 by\n@op https://github.com/op, instead of the concrete `*testing.T` type we\nshould instead accept the interface `testing.TB` so that benchmarks and\nfuzz tests can also use pgtestdb.","shortMessageHtmlLink":"feat: update New to accept testing.TB"}},{"before":null,"after":"3c66a0e911b97ab5f3df5c8d5bc2dbf2156a8dda","ref":"refs/heads/pd/updates","pushedAt":"2023-12-10T01:34:21.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: update New to accept testing.TB\n\nAs suggested in PR #3 https://github.com/peterldowns/pgtestdb/pull/3 by\n@op https://github.com/op, instead of the concrete `*testing.T` type we\nshould instead accept the interface `testing.TB` so that benchmarks and\nfuzz tests can also use pgtestdb.","shortMessageHtmlLink":"feat: update New to accept testing.TB"}},{"before":"3c66a0e911b97ab5f3df5c8d5bc2dbf2156a8dda","after":null,"ref":"refs/heads/pd/testing-tb","pushedAt":"2023-12-10T01:34:10.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"}},{"before":null,"after":"3c66a0e911b97ab5f3df5c8d5bc2dbf2156a8dda","ref":"refs/heads/pd/testing-tb","pushedAt":"2023-12-10T01:34:03.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"feat: update New to accept testing.TB\n\nAs suggested in PR #3 https://github.com/peterldowns/pgtestdb/pull/3 by\n@op https://github.com/op, instead of the concrete `*testing.T` type we\nshould instead accept the interface `testing.TB` so that benchmarks and\nfuzz tests can also use pgtestdb.","shortMessageHtmlLink":"feat: update New to accept testing.TB"}},{"before":"527f0b52be53e5b8ef3932063f01b77813320aa1","after":"753bb344279b5f4e2989aff81b9d1d71fd06b9e0","ref":"refs/heads/main","pushedAt":"2023-12-07T01:18:08.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"cleanup(nix) remove unnecessary Python dependencies","shortMessageHtmlLink":"cleanup(nix) remove unnecessary Python dependencies"}},{"before":"0e8fa75a26a1a7df51f244f47673523bf7134209","after":"527f0b52be53e5b8ef3932063f01b77813320aa1","ref":"refs/heads/main","pushedAt":"2023-07-06T21:08:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Fix typo in README","shortMessageHtmlLink":"Fix typo in README"}},{"before":"b576a6fabbe648ca8122ec8a6bcdcc14515e758e","after":"0e8fa75a26a1a7df51f244f47673523bf7134209","ref":"refs/heads/main","pushedAt":"2023-07-06T21:06:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Add pgmigrator to migrators to tag","shortMessageHtmlLink":"Add pgmigrator to migrators to tag"}},{"before":"fb6e94d5fc51f742e731822cc23a1ba9af84af08","after":"b576a6fabbe648ca8122ec8a6bcdcc14515e758e","ref":"refs/heads/main","pushedAt":"2023-07-05T19:43:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Update to pgmigrator v0.0.5","shortMessageHtmlLink":"Update to pgmigrator v0.0.5"}},{"before":"6f5ab3ecd0eae3f494dd950bc2eb70ce15bd13fc","after":"fb6e94d5fc51f742e731822cc23a1ba9af84af08","ref":"refs/heads/main","pushedAt":"2023-06-06T18:24:21.007Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Fix pgmigrator links","shortMessageHtmlLink":"Fix pgmigrator links"}},{"before":"2a8ae3e3099c848f7f02c2d663f6b9c147343ef3","after":"6f5ab3ecd0eae3f494dd950bc2eb70ce15bd13fc","ref":"refs/heads/main","pushedAt":"2023-06-06T18:11:36.905Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Add a migrator for peterldowns/pgmigrate","shortMessageHtmlLink":"Add a migrator for peterldowns/pgmigrate"}},{"before":"97cb66266847101b1a6e9817004a3d98b6330f57","after":"2a8ae3e3099c848f7f02c2d663f6b9c147343ef3","ref":"refs/heads/main","pushedAt":"2023-06-02T03:13:37.751Z","pushType":"push","commitsCount":1,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Bump version to v0.0.9","shortMessageHtmlLink":"Bump version to v0.0.9"}},{"before":"11e29944a162e34f082ec78f3f25aeb15f3219fa","after":"97cb66266847101b1a6e9817004a3d98b6330f57","ref":"refs/heads/main","pushedAt":"2023-06-02T03:11:11.457Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"peterldowns","name":"Peter Downs","path":"/peterldowns","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/824173?s=80&v=4"},"commit":{"message":"Make Config.Connect() public.","shortMessageHtmlLink":"Make Config.Connect() public."}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEVDh_iwA","startCursor":null,"endCursor":null}},"title":"Activity · peterldowns/pgtestdb"}