message-db 0.0.0 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/database/VERSION.txt +1 -0
- data/database/benchmark.sh +62 -0
- data/database/benchmark_get.sql +24 -0
- data/database/benchmark_write.sql +24 -0
- data/database/clear-messages.sh +26 -0
- data/database/extensions/pgcrypto.sql +1 -0
- data/database/functions/acquire-lock.sql +24 -0
- data/database/functions/cardinal-id.sql +18 -0
- data/database/functions/category.sql +10 -0
- data/database/functions/get-category-messages.sql +129 -0
- data/database/functions/get-last-stream-message.sql +37 -0
- data/database/functions/get-stream-messages.sql +71 -0
- data/database/functions/hash-64.sql +13 -0
- data/database/functions/id.sql +18 -0
- data/database/functions/is-category.sql +14 -0
- data/database/functions/message-store-version.sql +8 -0
- data/database/functions/stream-version.sql +19 -0
- data/database/functions/write-message.sql +73 -0
- data/database/indexes/messages-category.sql +7 -0
- data/database/indexes/messages-id.sql +5 -0
- data/database/indexes/messages-stream.sql +6 -0
- data/database/install-functions.sh +79 -0
- data/database/install-indexes.sh +33 -0
- data/database/install-privileges.sh +39 -0
- data/database/install-views.sh +42 -0
- data/database/install.sh +102 -0
- data/database/print-category-type-summary.sh +44 -0
- data/database/print-message-store-version.sh +32 -0
- data/database/print-messages.sh +44 -0
- data/database/print-stream-summary.sh +44 -0
- data/database/print-stream-type-summary.sh +44 -0
- data/database/print-type-category-summary.sh +44 -0
- data/database/print-type-stream-summary.sh +44 -0
- data/database/print-type-summary.sh +44 -0
- data/database/privileges/functions.sql +15 -0
- data/database/privileges/schema.sql +1 -0
- data/database/privileges/sequence.sql +1 -0
- data/database/privileges/table.sql +1 -0
- data/database/privileges/views.sql +6 -0
- data/database/roles/message-store.sql +7 -0
- data/database/schema/message-store.sql +1 -0
- data/database/tables/messages.sql +12 -0
- data/database/types/message.sql +15 -0
- data/database/uninstall.sh +54 -0
- data/database/update.sh +171 -0
- data/database/views/category-type-summary.sql +32 -0
- data/database/views/stream-summary.sql +28 -0
- data/database/views/stream-type-summary.sql +32 -0
- data/database/views/type-category-summary.sql +32 -0
- data/database/views/type-stream-summary.sql +32 -0
- data/database/views/type-summary.sql +28 -0
- data/database/write-test-message.sh +63 -0
- data/scripts/mdb-clear-messages +7 -0
- data/scripts/mdb-create-db +7 -0
- data/scripts/mdb-delete-db +7 -0
- data/scripts/mdb-install-functions +7 -0
- data/scripts/mdb-install-indexes +7 -0
- data/scripts/mdb-install-privileges +7 -0
- data/scripts/mdb-install-views +7 -0
- data/scripts/mdb-open-database-scripts-dir +5 -0
- data/scripts/mdb-print-category-type-summary +7 -0
- data/scripts/mdb-print-message-store-version +7 -0
- data/scripts/mdb-print-messages +7 -0
- data/scripts/mdb-print-stream-summary +7 -0
- data/scripts/mdb-print-stream-type-summary +7 -0
- data/scripts/mdb-print-type-category-summary +7 -0
- data/scripts/mdb-print-type-stream-summary +7 -0
- data/scripts/mdb-print-type-summary +7 -0
- data/scripts/mdb-recreate-db +11 -0
- data/scripts/mdb-update-db +7 -0
- data/scripts/mdb-write-test-message +7 -0
- metadata +95 -6
- data/MIT-License.txt +0 -20
data/database/update.sh
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
function script_dir {
|
6
|
+
val="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
7
|
+
echo "$val"
|
8
|
+
}
|
9
|
+
|
10
|
+
base=$(script_dir)
|
11
|
+
|
12
|
+
echo
|
13
|
+
echo "Updating Database"
|
14
|
+
echo "Version: $(cat $base/VERSION.txt)"
|
15
|
+
echo "= = ="
|
16
|
+
|
17
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
18
|
+
echo "(DATABASE_NAME is not set. Default will be used.)"
|
19
|
+
database=message_store
|
20
|
+
export DATABASE_NAME=$database
|
21
|
+
else
|
22
|
+
database=$DATABASE_NAME
|
23
|
+
fi
|
24
|
+
echo
|
25
|
+
|
26
|
+
if [ -z ${PGOPTIONS+x} ]; then
|
27
|
+
export PGOPTIONS='-c client_min_messages=warning'
|
28
|
+
fi
|
29
|
+
|
30
|
+
function delete-extensions {
|
31
|
+
echo "» pgcrypto extension"
|
32
|
+
psql $database -q -c "DROP EXTENSION IF EXISTS pgcrypto";
|
33
|
+
}
|
34
|
+
|
35
|
+
function delete-indexes {
|
36
|
+
echo "» messages_id_uniq_idx index"
|
37
|
+
psql $database -q -c "DROP INDEX IF EXISTS messages_id_uniq_idx CASCADE";
|
38
|
+
|
39
|
+
echo "» messages_stream_name_position_uniq_idx index"
|
40
|
+
psql $database -q -c "DROP INDEX IF EXISTS messages_stream_name_position_uniq_idx";
|
41
|
+
|
42
|
+
echo "» messages_category_global_position_idx index"
|
43
|
+
psql $database -q -c "DROP INDEX IF EXISTS messages_category_global_position_idx";
|
44
|
+
}
|
45
|
+
|
46
|
+
function delete-views {
|
47
|
+
echo "» stream_summary view"
|
48
|
+
psql $database -q -c "DROP VIEW IF EXISTS stream_summary CASCADE";
|
49
|
+
|
50
|
+
echo "» type_summary view"
|
51
|
+
psql $database -q -c "DROP VIEW IF EXISTS type_summary CASCADE";
|
52
|
+
|
53
|
+
echo "» stream_type_summary view"
|
54
|
+
psql $database -q -c "DROP VIEW IF EXISTS stream_type_summary CASCADE";
|
55
|
+
|
56
|
+
echo "» type_stream_summary view"
|
57
|
+
psql $database -q -c "DROP VIEW IF EXISTS type_stream_summary CASCADE";
|
58
|
+
|
59
|
+
echo "» category_type_summary view"
|
60
|
+
psql $database -q -c "DROP VIEW IF EXISTS category_type_summary CASCADE";
|
61
|
+
|
62
|
+
echo "» type_category_summary view"
|
63
|
+
psql $database -q -c "DROP VIEW IF EXISTS type_category_summary CASCADE";
|
64
|
+
}
|
65
|
+
|
66
|
+
function delete-functions {
|
67
|
+
echo "» hash_64 function"
|
68
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS hash_64 CASCADE";
|
69
|
+
|
70
|
+
echo "» category function"
|
71
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS category CASCADE";
|
72
|
+
|
73
|
+
echo "» stream_version function"
|
74
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS stream_version CASCADE";
|
75
|
+
|
76
|
+
echo "» write_message function"
|
77
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS write_message CASCADE";
|
78
|
+
|
79
|
+
echo "» get_stream_messages function"
|
80
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS get_stream_messages CASCADE";
|
81
|
+
|
82
|
+
echo "» get_category_messages function"
|
83
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS get_category_messages CASCADE";
|
84
|
+
|
85
|
+
echo "» get_last_message function"
|
86
|
+
psql $database -q -c "DROP FUNCTION IF EXISTS get_last_message CASCADE";
|
87
|
+
}
|
88
|
+
|
89
|
+
function delete-extensions {
|
90
|
+
echo "» pgcrypto extension"
|
91
|
+
psql $database -q -c "DROP EXTENSION IF EXISTS pgcrypto CASCADE";
|
92
|
+
}
|
93
|
+
|
94
|
+
function create-schema {
|
95
|
+
echo "» message_store schema"
|
96
|
+
psql $database -q -f $base/schema/message-store.sql
|
97
|
+
}
|
98
|
+
|
99
|
+
function add-table-to-schema {
|
100
|
+
echo "» messages table"
|
101
|
+
psql $database -q -c "ALTER TABLE messages SET SCHEMA message_store";
|
102
|
+
}
|
103
|
+
|
104
|
+
function create-extensions {
|
105
|
+
base=$(script_dir)
|
106
|
+
|
107
|
+
echo "» pgcrypto extension"
|
108
|
+
psql $database -q -f $base/extensions/pgcrypto.sql
|
109
|
+
}
|
110
|
+
|
111
|
+
function set-default-value {
|
112
|
+
echo "» id column"
|
113
|
+
psql $database -q -c "ALTER TABLE message_store.messages ALTER COLUMN id SET DEFAULT gen_random_uuid()";
|
114
|
+
}
|
115
|
+
|
116
|
+
echo "Deleting Views"
|
117
|
+
echo "- - -"
|
118
|
+
delete-views
|
119
|
+
echo
|
120
|
+
|
121
|
+
echo "Deleting Indexes"
|
122
|
+
echo "- - -"
|
123
|
+
delete-indexes
|
124
|
+
echo
|
125
|
+
|
126
|
+
echo "Deleting Functions"
|
127
|
+
echo "- - -"
|
128
|
+
delete-functions
|
129
|
+
echo
|
130
|
+
|
131
|
+
echo "Deleting Extensions"
|
132
|
+
echo "- - -"
|
133
|
+
delete-extensions
|
134
|
+
echo
|
135
|
+
|
136
|
+
echo "Creating Schema"
|
137
|
+
echo "- - -"
|
138
|
+
create-schema
|
139
|
+
echo
|
140
|
+
|
141
|
+
echo "Creating Extensions"
|
142
|
+
echo "- - -"
|
143
|
+
create-extensions
|
144
|
+
echo
|
145
|
+
|
146
|
+
echo "Adding Table to Schema"
|
147
|
+
echo "- - -"
|
148
|
+
add-table-to-schema
|
149
|
+
echo
|
150
|
+
|
151
|
+
echo "Set Default Value for ID Column"
|
152
|
+
echo "- - -"
|
153
|
+
set-default-value
|
154
|
+
echo
|
155
|
+
|
156
|
+
# Install functions
|
157
|
+
source $base/install-functions.sh
|
158
|
+
|
159
|
+
# Install indexes
|
160
|
+
source $base/install-indexes.sh
|
161
|
+
|
162
|
+
# Install views
|
163
|
+
source $base/install-views.sh
|
164
|
+
|
165
|
+
# Install privileges
|
166
|
+
source $base/install-privileges.sh
|
167
|
+
|
168
|
+
echo "= = ="
|
169
|
+
echo "Done Updating Database"
|
170
|
+
echo "Version: $(cat $base/VERSION.txt)"
|
171
|
+
echo
|
@@ -0,0 +1,32 @@
|
|
1
|
+
CREATE OR REPLACE VIEW message_store.category_type_summary AS
|
2
|
+
WITH
|
3
|
+
type_count AS (
|
4
|
+
SELECT
|
5
|
+
message_store.category(stream_name) AS category,
|
6
|
+
type,
|
7
|
+
COUNT(id) AS message_count
|
8
|
+
FROM
|
9
|
+
message_store.messages
|
10
|
+
GROUP BY
|
11
|
+
category,
|
12
|
+
type
|
13
|
+
),
|
14
|
+
|
15
|
+
total_count AS (
|
16
|
+
SELECT
|
17
|
+
COUNT(id)::decimal AS total_count
|
18
|
+
FROM
|
19
|
+
message_store.messages
|
20
|
+
)
|
21
|
+
|
22
|
+
SELECT
|
23
|
+
category,
|
24
|
+
type,
|
25
|
+
message_count,
|
26
|
+
ROUND((message_count / total_count)::decimal * 100, 2) AS percent
|
27
|
+
FROM
|
28
|
+
type_count,
|
29
|
+
total_count
|
30
|
+
ORDER BY
|
31
|
+
category,
|
32
|
+
type;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
CREATE OR REPLACE VIEW message_store.stream_summary AS
|
2
|
+
WITH
|
3
|
+
stream_count AS (
|
4
|
+
SELECT
|
5
|
+
stream_name,
|
6
|
+
COUNT(id) AS message_count
|
7
|
+
FROM
|
8
|
+
message_store.messages
|
9
|
+
GROUP BY
|
10
|
+
stream_name
|
11
|
+
),
|
12
|
+
|
13
|
+
total_count AS (
|
14
|
+
SELECT
|
15
|
+
COUNT(id)::decimal AS total_count
|
16
|
+
FROM
|
17
|
+
message_store.messages
|
18
|
+
)
|
19
|
+
|
20
|
+
SELECT
|
21
|
+
stream_name,
|
22
|
+
message_count,
|
23
|
+
ROUND((message_count / total_count)::decimal * 100, 2) AS percent
|
24
|
+
FROM
|
25
|
+
stream_count,
|
26
|
+
total_count
|
27
|
+
ORDER BY
|
28
|
+
stream_name;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
CREATE OR REPLACE VIEW message_store.stream_type_summary AS
|
2
|
+
WITH
|
3
|
+
type_count AS (
|
4
|
+
SELECT
|
5
|
+
stream_name,
|
6
|
+
type,
|
7
|
+
COUNT(id) AS message_count
|
8
|
+
FROM
|
9
|
+
message_store.messages
|
10
|
+
GROUP BY
|
11
|
+
stream_name,
|
12
|
+
type
|
13
|
+
),
|
14
|
+
|
15
|
+
total_count AS (
|
16
|
+
SELECT
|
17
|
+
COUNT(id)::decimal AS total_count
|
18
|
+
FROM
|
19
|
+
message_store.messages
|
20
|
+
)
|
21
|
+
|
22
|
+
SELECT
|
23
|
+
stream_name,
|
24
|
+
type,
|
25
|
+
message_count,
|
26
|
+
ROUND((message_count / total_count)::decimal * 100, 2) AS percent
|
27
|
+
FROM
|
28
|
+
type_count,
|
29
|
+
total_count
|
30
|
+
ORDER BY
|
31
|
+
stream_name,
|
32
|
+
type;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
CREATE OR REPLACE VIEW message_store.type_category_summary AS
|
2
|
+
WITH
|
3
|
+
type_count AS (
|
4
|
+
SELECT
|
5
|
+
type,
|
6
|
+
message_store.category(stream_name) AS category,
|
7
|
+
COUNT(id) AS message_count
|
8
|
+
FROM
|
9
|
+
message_store.messages
|
10
|
+
GROUP BY
|
11
|
+
type,
|
12
|
+
category
|
13
|
+
),
|
14
|
+
|
15
|
+
total_count AS (
|
16
|
+
SELECT
|
17
|
+
COUNT(id)::decimal AS total_count
|
18
|
+
FROM
|
19
|
+
message_store.messages
|
20
|
+
)
|
21
|
+
|
22
|
+
SELECT
|
23
|
+
type,
|
24
|
+
category,
|
25
|
+
message_count,
|
26
|
+
ROUND((message_count / total_count)::decimal * 100, 2) AS percent
|
27
|
+
FROM
|
28
|
+
type_count,
|
29
|
+
total_count
|
30
|
+
ORDER BY
|
31
|
+
type,
|
32
|
+
category;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
CREATE OR REPLACE VIEW message_store.type_stream_summary AS
|
2
|
+
WITH
|
3
|
+
type_count AS (
|
4
|
+
SELECT
|
5
|
+
type,
|
6
|
+
stream_name,
|
7
|
+
COUNT(id) AS message_count
|
8
|
+
FROM
|
9
|
+
message_store.messages
|
10
|
+
GROUP BY
|
11
|
+
type,
|
12
|
+
stream_name
|
13
|
+
),
|
14
|
+
|
15
|
+
total_count AS (
|
16
|
+
SELECT
|
17
|
+
COUNT(id)::decimal AS total_count
|
18
|
+
FROM
|
19
|
+
message_store.messages
|
20
|
+
)
|
21
|
+
|
22
|
+
SELECT
|
23
|
+
type,
|
24
|
+
stream_name,
|
25
|
+
message_count,
|
26
|
+
ROUND((message_count / total_count)::decimal * 100, 2) AS percent
|
27
|
+
FROM
|
28
|
+
type_count,
|
29
|
+
total_count
|
30
|
+
ORDER BY
|
31
|
+
type,
|
32
|
+
stream_name;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
CREATE OR REPLACE VIEW message_store.type_summary AS
|
2
|
+
WITH
|
3
|
+
type_count AS (
|
4
|
+
SELECT
|
5
|
+
type,
|
6
|
+
COUNT(id) AS message_count
|
7
|
+
FROM
|
8
|
+
message_store.messages
|
9
|
+
GROUP BY
|
10
|
+
type
|
11
|
+
),
|
12
|
+
|
13
|
+
total_count AS (
|
14
|
+
SELECT
|
15
|
+
COUNT(id)::decimal AS total_count
|
16
|
+
FROM
|
17
|
+
message_store.messages
|
18
|
+
)
|
19
|
+
|
20
|
+
SELECT
|
21
|
+
type,
|
22
|
+
message_count,
|
23
|
+
ROUND((message_count / total_count)::decimal * 100, 2) AS percent
|
24
|
+
FROM
|
25
|
+
type_count,
|
26
|
+
total_count
|
27
|
+
ORDER BY
|
28
|
+
type;
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -u
|
4
|
+
|
5
|
+
instances=1
|
6
|
+
if [ ! -z ${INSTANCES+x} ]; then
|
7
|
+
instances=$INSTANCES
|
8
|
+
fi
|
9
|
+
|
10
|
+
uuid=$(echo $(uuidgen) | tr '[:upper:]' '[:lower:]')
|
11
|
+
stream_name="testStream-$uuid"
|
12
|
+
if [ ! -z ${STREAM_NAME+x} ]; then
|
13
|
+
stream_name=$STREAM_NAME
|
14
|
+
fi
|
15
|
+
|
16
|
+
title="Writing $instances Messages to Stream $stream_name"
|
17
|
+
if [ -z ${METADATA+x} ]; then
|
18
|
+
metadata="'{\"metaAttribute\": \"some meta value\"}'"
|
19
|
+
else
|
20
|
+
metadata="$METADATA"
|
21
|
+
title="$title with Metadata $metadata"
|
22
|
+
fi
|
23
|
+
|
24
|
+
metadata="$metadata::jsonb"
|
25
|
+
|
26
|
+
echo
|
27
|
+
echo $title
|
28
|
+
echo "= = ="
|
29
|
+
echo
|
30
|
+
|
31
|
+
default_name=message_store
|
32
|
+
|
33
|
+
if [ -z ${DATABASE_USER+x} ]; then
|
34
|
+
echo "(DATABASE_USER is not set)"
|
35
|
+
user=$default_name
|
36
|
+
else
|
37
|
+
user=$DATABASE_USER
|
38
|
+
fi
|
39
|
+
echo "Database user is: $user"
|
40
|
+
|
41
|
+
if [ -z ${DATABASE_NAME+x} ]; then
|
42
|
+
echo "(DATABASE_NAME is not set)"
|
43
|
+
database=$default_name
|
44
|
+
else
|
45
|
+
database=$DATABASE_NAME
|
46
|
+
fi
|
47
|
+
echo "Database name is: $database"
|
48
|
+
echo
|
49
|
+
|
50
|
+
|
51
|
+
for (( i=1; i<=instances; i++ )); do
|
52
|
+
uuid=$(echo $(uuidgen) | tr '[:upper:]' '[:lower:]')
|
53
|
+
|
54
|
+
echo "Instance: $i, Message ID: $uuid"
|
55
|
+
|
56
|
+
psql $database -U $user -c "SELECT write_message('$uuid'::varchar, '$stream_name'::varchar, 'SomeType'::varchar, '{\"attribute\": \"some value\"}'::jsonb, $metadata);" > /dev/null
|
57
|
+
done
|
58
|
+
|
59
|
+
|
60
|
+
echo
|
61
|
+
psql $database -U $user -P pager=off -x -c "SELECT * FROM messages WHERE stream_name = '$stream_name';"
|
62
|
+
|
63
|
+
echo
|