Skip to content

Commit ec9651e

Browse files
authored
Add support for pgvector using JDBC Testcontainers URL (#8638)
Fixes #8633
1 parent 18ea976 commit ec9651e

File tree

5 files changed

+79
-1
lines changed

5 files changed

+79
-1
lines changed

docs/modules/databases/jdbc.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ Insert `tc:` after `jdbc:` as follows. Note that the hostname, port and database
7979

8080
`jdbc:tc:timescaledb:2.1.0-pg13:///databasename`
8181

82+
#### Using PGVector
83+
84+
`jdbc:tc:pgvector:pg16:///databasename`
85+
8286
#### Using TiDB
8387

8488
`jdbc:tc:tidb:v6.1.0:///databasename`

modules/jdbc-test/src/main/java/org/testcontainers/jdbc/AbstractJDBCDriverTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ private void performTestForJDBCParamUsage(HikariDataSource dataSource) throws SQ
130130
if (
131131
databaseType.equalsIgnoreCase("postgresql") ||
132132
databaseType.equalsIgnoreCase("postgis") ||
133-
databaseType.equalsIgnoreCase("timescaledb")
133+
databaseType.equalsIgnoreCase("timescaledb") ||
134+
databaseType.equalsIgnoreCase("pgvector")
134135
) {
135136
databaseQuery = "SELECT CURRENT_DATABASE()";
136137
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.testcontainers.containers;
2+
3+
import org.testcontainers.jdbc.ConnectionUrl;
4+
import org.testcontainers.utility.DockerImageName;
5+
6+
/**
7+
* Factory for PgVector containers.
8+
*
9+
* @see <a href="https://github.com/pgvector/pgvector">https://github.com/pgvector/pgvector</a>
10+
*/
11+
public class PgVectorContainerProvider extends JdbcDatabaseContainerProvider {
12+
13+
private static final String NAME = "pgvector";
14+
15+
private static final String DEFAULT_TAG = "pg16";
16+
17+
private static final DockerImageName DEFAULT_IMAGE = DockerImageName
18+
.parse("pgvector/pgvector")
19+
.asCompatibleSubstituteFor("postgres");
20+
21+
public static final String USER_PARAM = "user";
22+
23+
public static final String PASSWORD_PARAM = "password";
24+
25+
@Override
26+
public boolean supports(String databaseType) {
27+
return databaseType.equals(NAME);
28+
}
29+
30+
@Override
31+
public JdbcDatabaseContainer newInstance() {
32+
return newInstance(DEFAULT_TAG);
33+
}
34+
35+
@Override
36+
public JdbcDatabaseContainer newInstance(String tag) {
37+
return new PostgreSQLContainer(DEFAULT_IMAGE.withTag(tag));
38+
}
39+
40+
@Override
41+
public JdbcDatabaseContainer newInstance(ConnectionUrl connectionUrl) {
42+
return newInstanceFromConnectionUrl(connectionUrl, USER_PARAM, PASSWORD_PARAM);
43+
}
44+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
org.testcontainers.containers.PostgreSQLContainerProvider
22
org.testcontainers.containers.PostgisContainerProvider
33
org.testcontainers.containers.TimescaleDBContainerProvider
4+
org.testcontainers.containers.PgVectorContainerProvider
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.testcontainers.jdbc.pgvector;
2+
3+
import org.junit.runner.RunWith;
4+
import org.junit.runners.Parameterized;
5+
import org.testcontainers.jdbc.AbstractJDBCDriverTest;
6+
7+
import java.util.Arrays;
8+
import java.util.EnumSet;
9+
10+
@RunWith(Parameterized.class)
11+
public class PgVectorJDBCDriverTest extends AbstractJDBCDriverTest {
12+
13+
@Parameterized.Parameters(name = "{index} - {0}")
14+
public static Iterable<Object[]> data() {
15+
return Arrays.asList(
16+
new Object[][] {
17+
{
18+
"jdbc:tc:pgvector://hostname/databasename?user=someuser&password=somepwd",
19+
EnumSet.of(Options.JDBCParams),
20+
},
21+
{
22+
"jdbc:tc:pgvector:pg14://hostname/databasename?user=someuser&password=somepwd",
23+
EnumSet.of(Options.JDBCParams),
24+
},
25+
}
26+
);
27+
}
28+
}

0 commit comments

Comments
 (0)