mirror of
https://github.com/hashicorp/vault.git
synced 2025-09-01 12:01:10 +02:00
Prepared statements prevent the use of connection multiplexing software such as PGBouncer. Even when PGBouncer is configured for [session mode][1] there's a possibility that a connection to PostgreSQL can be re-used by different clients. This leads to errors when clients use session based features (like prepared statements). This change removes prepared statements from the PostgreSQL physical backend. This will allow vault to successfully work in infrastructures that employ the use of PGBouncer or other connection multiplexing software. [1]: https://pgbouncer.github.io/config.html#poolmode
45 lines
765 B
Go
45 lines
765 B
Go
package physical
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"testing"
|
|
|
|
_ "github.com/lib/pq"
|
|
)
|
|
|
|
func TestPostgreSQLBackend(t *testing.T) {
|
|
connURL := os.Getenv("PGURL")
|
|
if connURL == "" {
|
|
t.SkipNow()
|
|
}
|
|
|
|
table := os.Getenv("PGTABLE")
|
|
if table == "" {
|
|
table = "vault_kv_store"
|
|
}
|
|
|
|
// Run vault tests
|
|
logger := log.New(os.Stderr, "", log.LstdFlags)
|
|
b, err := NewBackend("postgresql", logger, map[string]string{
|
|
"connection_url": connURL,
|
|
"table": table,
|
|
})
|
|
|
|
if err != nil {
|
|
t.Fatalf("Failed to create new backend: %v", err)
|
|
}
|
|
|
|
defer func() {
|
|
pg := b.(*PostgreSQLBackend)
|
|
_, err := pg.client.Exec("TRUNCATE TABLE " + pg.table)
|
|
if err != nil {
|
|
t.Fatalf("Failed to drop table: %v", err)
|
|
}
|
|
}()
|
|
|
|
testBackend(t, b)
|
|
testBackend_ListPrefix(t, b)
|
|
|
|
}
|