-
Notifications
You must be signed in to change notification settings - Fork 56
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
156 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package pgvector | ||
|
||
import ( | ||
"context" | ||
|
||
"github.com/percona/percona-postgresql-operator/internal/logging" | ||
"github.com/percona/percona-postgresql-operator/internal/postgres" | ||
) | ||
|
||
// EnableInPostgreSQL installs pgvector triggers into every database. | ||
func EnableInPostgreSQL(ctx context.Context, exec postgres.Executor) error { | ||
log := logging.FromContext(ctx) | ||
|
||
stdout, stderr, err := exec.ExecInAllDatabases(ctx, | ||
// Quiet the NOTICE from IF EXISTS, and install the pgAudit event triggers. | ||
// - https://www.postgresql.org/docs/current/runtime-config-client.html | ||
// - https://github.com/pgaudit/pgaudit#settings | ||
`SET client_min_messages = WARNING; CREATE EXTENSION IF NOT EXISTS vector; ALTER EXTENSION vector UPDATE;`, | ||
map[string]string{ | ||
"ON_ERROR_STOP": "on", // Abort when any one command fails. | ||
"QUIET": "on", // Do not print successful commands to stdout. | ||
}) | ||
|
||
log.V(1).Info("enabled pgvector", "stdout", stdout, "stderr", stderr) | ||
|
||
return err | ||
} | ||
|
||
func DisableInPostgreSQL(ctx context.Context, exec postgres.Executor) error { | ||
log := logging.FromContext(ctx) | ||
|
||
stdout, stderr, err := exec.ExecInAllDatabases(ctx, | ||
// Quiet the NOTICE from IF EXISTS, and install the pgAudit event triggers. | ||
// - https://www.postgresql.org/docs/current/runtime-config-client.html | ||
// - https://github.com/pgaudit/pgaudit#settings | ||
`SET client_min_messages = WARNING; DROP EXTENSION IF EXISTS vector;`, | ||
map[string]string{ | ||
"ON_ERROR_STOP": "on", // Abort when any one command fails. | ||
"QUIET": "on", // Do not print successful commands to stdout. | ||
}) | ||
|
||
log.V(1).Info("disabled pgvector", "stdout", stdout, "stderr", stderr) | ||
|
||
return err | ||
} | ||
|
||
// PostgreSQLParameters sets the parameters required by pgAudit. | ||
func PostgreSQLParameters(outParameters *postgres.Parameters) {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package pgvector | ||
|
||
import ( | ||
"context" | ||
"errors" | ||
"io" | ||
"strings" | ||
"testing" | ||
|
||
"gotest.tools/v3/assert" | ||
) | ||
|
||
func TestEnableInPostgreSQL(t *testing.T) { | ||
expected := errors.New("whoops") | ||
exec := func( | ||
_ context.Context, stdin io.Reader, stdout, stderr io.Writer, command ...string, | ||
) error { | ||
assert.Assert(t, stdout != nil, "should capture stdout") | ||
assert.Assert(t, stderr != nil, "should capture stderr") | ||
|
||
assert.Assert(t, strings.Contains(strings.Join(command, "\n"), | ||
`SELECT datname FROM pg_catalog.pg_database`, | ||
), "expected all databases and templates") | ||
|
||
b, err := io.ReadAll(stdin) | ||
assert.NilError(t, err) | ||
assert.Equal(t, string(b), strings.Trim(` | ||
SET client_min_messages = WARNING; CREATE EXTENSION IF NOT EXISTS vector; ALTER EXTENSION vector UPDATE; | ||
`, "\t\n")) | ||
|
||
return expected | ||
} | ||
|
||
ctx := context.Background() | ||
assert.Equal(t, expected, EnableInPostgreSQL(ctx, exec)) | ||
} | ||
|
||
func TestDisableInPostgreSQL(t *testing.T) { | ||
expected := errors.New("whoops") | ||
exec := func( | ||
_ context.Context, stdin io.Reader, stdout, stderr io.Writer, command ...string, | ||
) error { | ||
assert.Assert(t, stdout != nil, "should capture stdout") | ||
assert.Assert(t, stderr != nil, "should capture stderr") | ||
|
||
assert.Assert(t, strings.Contains(strings.Join(command, "\n"), | ||
`SELECT datname FROM pg_catalog.pg_database`, | ||
), "expected all databases and templates") | ||
|
||
b, err := io.ReadAll(stdin) | ||
assert.NilError(t, err) | ||
assert.Equal(t, string(b), strings.Trim(` | ||
SET client_min_messages = WARNING; DROP EXTENSION IF EXISTS vector; | ||
`, "\t\n")) | ||
|
||
return expected | ||
} | ||
|
||
ctx := context.Background() | ||
assert.Equal(t, expected, DisableInPostgreSQL(ctx, exec)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters