Refactor directory structure and tests

- Directory structure now matches common practices
- Regression tests now run with pg_regress via the PGXS infrastructure.
- Unit tests do not integrate well with pg_regress and have to be run
  separately.
- Docker functionality is separate from main Makefile. Run with
  `make -f docker.mk` to build and `make -f docker.mk run` to run
  the database in a container.
This commit is contained in:
Erik Nordström 2017-01-31 14:56:41 +01:00
parent 4fd1d9d299
commit 7b94c573ba
211 changed files with 899 additions and 316 deletions

9
.gitignore vendored
View File

@ -1,2 +1,7 @@
extension/sql/tests/unit/testoutputs.tmp
data/
/sql/tests/unit/testoutputs.tmp
/sql/iobeamdb--*.sql
/data/
/src/*.o
/src/*.so
/.vscode/
/iobeamdb.so

View File

@ -10,5 +10,13 @@ RUN apt-get update && apt-get install -y \
postgresql-server-dev-$PG_MAJOR \
&& rm -rf /var/lib/apt/lists/*
COPY extension /extension
RUN cd /extension && make install && rm -rf /extension
RUN mkdir -p /build/{src/deps,test/results}
COPY sql /build/sql
COPY src/*.c src/*.h build/src/
COPY src/deps/*.h build/src/deps/
COPY test/expected /build/test/
COPY test/sql /build/test/
COPY test/runner.sh /build/test/runner.sh
COPY iobeamdb.control /build/
COPY Makefile build/Makefile
RUN make -C /build install && rm -rf /build

View File

@ -1,44 +1,62 @@
EXTENSION = iobeamdb
SQL_FILES = $(shell cat sql/load_order.txt)
IMAGE_NAME = iobeamdb
MAKE = make
EXT_VERSION = 1.0
EXT_SQL_FILE = sql/$(EXTENSION)--$(EXT_VERSION).sql
all: test-docker
DATA = $(EXT_SQL_FILE)
MODULE_big = $(EXTENSION)
# Targets for installing the extension without using Docker
clean:
$(MAKE) -C ./extension clean
@rm -f ./extension/iobeamdb--*.sql
SRCS = src/iobeamdb.c src/murmur3.c src/pgmurmur3.c
OBJS = $(SRCS:.c=.o)
install:
$(MAKE) -C ./extension install
MKFILE_PATH := $(abspath $(MAKEFILE_LIST))
CURRENT_DIR = $(dir $(MKFILE_PATH))
# Targets for building/running Docker images
build-docker:
@docker build . -t $(IMAGE_NAME)
TEST_PGPORT ?= 5432
TEST_PGHOST ?= localhost
TEST_PGUSER ?= postgres
TESTS = $(sort $(wildcard test/sql/*.sql))
USE_MODULE_DB=true
REGRESS = $(patsubst test/sql/%.sql,%,$(TESTS))
REGRESS_OPTS = \
--inputdir=test \
--outputdir=test \
--launcher=test/runner.sh \
--host=$(TEST_PGHOST) \
--port=$(TEST_PGPORT) \
--user=$(TEST_PGUSER) \
--load-language=plpgsql \
--load-extension=dblink \
--load-extension=postgres_fdw \
--load-extension=hstore \
--load-extension=iobeamdb
docker-run:
@IMAGE_NAME=$(IMAGE_NAME) ./scripts/docker-run.sh
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
start-test-docker:
@ . scripts/test-docker-config.sh && IMAGE_NAME=$(IMAGE_NAME) CONTAINER_NAME=iobeamdb_testing ./scripts/start-test-docker.sh
EXTRA_CLEAN = $(EXT_SQL_FILE)
stop-test-docker:
@docker rm -f iobeamdb_testing
include $(PGXS)
override CFLAGS += -DINCLUDE_PACKAGE_SUPPORT=0
override pg_regress_clean_files = test/results/ test/regression.diffs test/regression.out tmp_check/ log/
# Targets for tests
test-regression:
@ . scripts/test-docker-config.sh && cd extension/sql/tests/regression && ./run.sh
all: $(EXT_SQL_FILE)
test-unit:
@ . scripts/test-docker-config.sh && cd extension/sql/tests/unit && ./run.sh
$(EXT_SQL_FILE): $(SQL_FILES)
@cat $^ > $@
test-all: test-regression test-unit
@echo Running all tests
check-sql-files:
@echo $(SQL_FILES)
test-docker: build-docker start-test-docker test-all stop-test-docker
install: $(EXT_SQL_FILE)
# Setting up a single node database
setup-single-node-db:
@PGDATABASE=postgres ./scripts/run_sql.sh setup_single_node_db.psql
package: clean $(EXT_SQL_FILE)
@mkdir -p package/lib
@mkdir -p package/extension
$(install_sh) -m 755 $(EXTENSION).so 'package/lib/$(EXTENSION).so'
$(install_sh) -m 644 $(EXTENSION).control 'package/extension/'
$(install_sh) -m 644 $(EXT_SQL_FILE) 'package/extension/'
.PHONY: check-sql-files all
.PHONY: build-docker start-docker stop-docker test-regression test-unit test-all test all setup-single-node-db

View File

@ -1,40 +1,44 @@
### Prerequisites
You'll need to install and run [Docker](https://docs.docker.com/engine/installation/),
which is the current way to run the database.
- The [Postgres client](https://wiki.postgresql.org/wiki/Detailed_installation_guides) (psql)
- A standard PostgreSQL installation with development environment (header files), or
- Docker (see separate build and run instructions)
You need to install the [Postgres client](https://wiki.postgresql.org/wiki/Detailed_installation_guides)(psql).
### Build and install
### Building and running in Docker
The `Makefile` included in this repo has convenient commands for building,
starting, and stopping a Docker image of **iobeamdb**:
```bash
# To build the image
make build-docker
# To start the image using docker run.
# This creates a docker container named `iobeamdb`
# with a data volume mount inside the `data` subdirectory.
make docker-run
# To stop the container
docker stop iobeamdb
# To build the extension
make
# To install
make install
# To run tests (needs running Postgres server with preloaded extension)
make checkinstall
```
You can then run any other docker command on the container named `iobeamdb`.
### Build and run in Docker
With the Docker image running you can run the tests (see Testing) or create
your own single-node cluster.
```
# To build a Docker image
make -f docker.mk build
# To run a container
make -f docker.mk run
# To run tests
make -f docker test
```
### Setting up a local single node database
After starting the Docker image, you can start a local single node database:
```bash
make setup-single-node-db
psql -U postgres -h localhost < scripts/sql/setup_single_node_db.psql
```
This will set up a database named `iobeam` which can be accessed with:
This will set up a database named `iobeamdb` which can be accessed with:
```bash
psql -U postgres -h localhost -d iobeam
psql -U postgres -h localhost -d iobeamdb
```
#### Creating a table
@ -123,16 +127,3 @@ this creates a more compact, and thus efficient, index.
### Examples
TODO PROVIDE EXAMPLES
### Testing
There are four commands to run tests:
```bash
# Build and run a docker image and run all tests in that image
make test-docker
# Run all tests (no image built)
make test-all
# Run regression tests (no image built)
make test-regression
# Run unit tests (no image built)
make test-unit
```

28
docker.mk Normal file
View File

@ -0,0 +1,28 @@
IMAGE_NAME = iobeamdb
CONTAINER_NAME = iobeamdb
TEST_CONTAINER_NAME = $(CONTAINER_NAME)_testing
MAKE = make
PGPORT = 5432
TEST_PGPORT = 6543
TEST_TABLESPACE_PATH = /tmp/tspace1
build-image: Dockerfile
@docker build . -t $(IMAGE_NAME)
start-container:
-docker rm -f $(CONTAINER_NAME)
@IMAGE_NAME=$(IMAGE_NAME) DATA_DIR="" CONTAINER_NAME=$(CONTAINER_NAME) PGPORT=$(PGPORT) ./scripts/docker-run.sh
start-test-container:
@IMAGE_NAME=$(IMAGE_NAME) CONTAINER_NAME=$(TEST_CONTAINER_NAME) \
PGPORT=$(TEST_PGPORT) TEST_TABLESPACE_PATH=$(TEST_TABLESPACE_PATH) ./scripts/start-test-docker.sh
test: build-image start-test-container installcheck
@docker rm -f $(TEST_CONTAINER_NAME)
run: build-image start-container
include Makefile
.PHONY: test start-container start-test-container build-image

View File

@ -1,38 +0,0 @@
EXTENSION = iobeamdb
SQL_FILES = $(shell cat sql/load_order.txt)
EXT_VERSION = 1.0
EXT_SQL_FILE = iobeamdb--$(EXT_VERSION).sql
DATA = $(EXT_SQL_FILE)
MODULE_big = iobeamdb
SRCS = src/iobeamdb.c src/murmur3.c src/pgmurmur3.c
OBJS = $(SRCS:.c=.o)
EXTENSION = $(MODULE_big)
MKFILE_PATH := $(abspath $(MAKEFILE_LIST))
CURRENT_DIR = $(dir $(MKFILE_PATH))
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
override CFLAGS += -DINCLUDE_PACKAGE_SUPPORT=0
check-sql-files:
@echo $(EXT_SQL_FILES)
generate-sql-install-file:
@cat $(SQL_FILES) > $(EXT_SQL_FILE)
install: generate-sql-install-file
package: clean all generate-sql-install-file
@mkdir -p package/lib
@mkdir -p package/extension
$(install_sh) -m 755 iobeamdb.so 'package/lib/iobeamdb.so'
$(install_sh) -m 644 iobeamdb.control 'package/extension/'
$(install_sh) -m 644 iobeamdb--1.0.sql 'package/extension/'
.PHONY: check-sql-files generate-sql-install-file

View File

@ -1,2 +0,0 @@
actual/
dump/

View File

@ -1,36 +0,0 @@
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
\c test2
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000000000 | dev1 | 1.5 | 1 | 2 | t
1257894000000000000 | dev1 | 1.5 | 2 | |
1257894000000001000 | dev1 | 2.5 | 3 | |
1257894001000000000 | dev1 | 3.5 | 4 | |
1257897600000000000 | dev1 | 4.5 | 5 | | f
1257894002000000000 | dev1 | 2.5 | 3 | |
1257987600000000000 | dev1 | 1.5 | 1 | |
1257987600000000000 | dev1 | 1.5 | 2 | |
1257894000000000000 | dev20 | 1.5 | 1 | |
1257894000000000000 | dev20 | 1.5 | 2 | |
(10 rows)
DELETE FROM "testNs" WHERE series_0 = 1.5;
DELETE FROM "testNs" WHERE series_0 = 100;
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000001000 | dev1 | 2.5 | 3 | |
1257894001000000000 | dev1 | 3.5 | 4 | |
1257897600000000000 | dev1 | 4.5 | 5 | | f
1257894002000000000 | dev1 | 2.5 | 3 | |
(4 rows)

View File

@ -1,42 +0,0 @@
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
\c test2
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000000000 | dev1 | 1.5 | 1 | 2 | t
1257894000000000000 | dev1 | 1.5 | 2 | |
1257894000000001000 | dev1 | 2.5 | 3 | |
1257894001000000000 | dev1 | 3.5 | 4 | |
1257897600000000000 | dev1 | 4.5 | 5 | | f
1257894002000000000 | dev1 | 2.5 | 3 | |
1257987600000000000 | dev1 | 1.5 | 1 | |
1257987600000000000 | dev1 | 1.5 | 2 | |
1257894000000000000 | dev20 | 1.5 | 1 | |
1257894000000000000 | dev20 | 1.5 | 2 | |
(10 rows)
UPDATE "testNs" SET series_1 = 47;
UPDATE "testNs" SET series_bool = true;
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000000000 | dev1 | 1.5 | 47 | 2 | t
1257894000000000000 | dev1 | 1.5 | 47 | | t
1257894000000001000 | dev1 | 2.5 | 47 | | t
1257894001000000000 | dev1 | 3.5 | 47 | | t
1257897600000000000 | dev1 | 4.5 | 47 | | t
1257894002000000000 | dev1 | 2.5 | 47 | | t
1257987600000000000 | dev1 | 1.5 | 47 | | t
1257987600000000000 | dev1 | 1.5 | 47 | | t
1257894000000000000 | dev20 | 1.5 | 47 | | t
1257894000000000000 | dev20 | 1.5 | 47 | | t
(10 rows)

View File

@ -1,42 +0,0 @@
#!/bin/bash
set -e
UPDATE=${UPDATE:-false}
golden_test() {
psql -h localhost -U postgres -q -X -f $1 2>&1 | tee actual/$2
if diff expected/$2 actual/$2;
then
echo "$2 matches golden file"
else
if [ $UPDATE = true ]
then
echo "updating $2 golden file"
mv actual/$2 expected/$2
else
echo "ERROR: golden file doesn't match: $2"
exit 1
fi
fi
}
mkdir -p actual
rm -fr actual/*
mkdir -p dump
rm -fr dump/*
if [ "$#" -ne 0 ]; then
tests="$@"
else
tests=`ls -1 *.sql`
fi
for file in $tests
do
prefix="${file%%.*}"
echo "Running test '$prefix'"
golden_test ${prefix}.sql ${prefix}.out
done
echo "Success"

View File

@ -43,4 +43,3 @@ for i in {1..10}; do
fi
done

View File

@ -2,8 +2,6 @@
set -e
. `dirname $0`/test-docker-config.sh
if [[ -z "$CONTAINER_NAME" ]]; then
echo "The CONTAINER_NAME must be set"
exit 1
@ -23,10 +21,13 @@ fi
CONTAINER_NAME=$CONTAINER_NAME \
DATA_DIR="" \
IMAGE_NAME=$IMAGE_NAME \
PGPORT=${PGPORT:-5432} \
$(dirname $0)/docker-run.sh
TEST_TABLESPACE_PATH=${TEST_TABLESPACE_PATH:-/tmp/tspace1}
# Create data directories for tablespaces tests
docker exec -i $CONTAINER_NAME /bin/bash << 'EOF'
mkdir -p /var/lib/postgresql/data/tests/tspace{1,2}
chown postgres:postgres /var/lib/postgresql/data/tests/tspace{1,2}
docker exec -i $CONTAINER_NAME /bin/bash << EOF
mkdir -p ${TEST_TABLESPACE_PATH}
chown postgres ${TEST_TABLESPACE_PATH}
EOF

View File

@ -1,3 +0,0 @@
export PGPORT=${PGPORT:=6543}

5
test/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
results/
dump/
regression.diffs
regression.out
unit/testoutputs.tmp

View File

@ -1,36 +1,61 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
setup_meta
------------
(1 row)
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
setup_main
------------
(1 row)
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
setup_main
------------
(1 row)
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user
@ -58,13 +83,9 @@ SELECT add_node('test2' :: NAME, 'localhost');
\set ON_ERROR_STOP 0
SELECT add_node('should_fail' :: NAME, 'localhost', -1);
psql:cluster.sql:18: ERROR: 08001: could not connect to server "should_fail"
ERROR: 08001: could not connect to server "should_fail"
DETAIL: invalid port number: "-1"
LOCATION: connect_pg_server, connection.c:241
SELECT add_node('should_fail' :: NAME, '!@#€%&%&(%#&())', 5432);
psql:cluster.sql:19: ERROR: 08001: could not connect to server "should_fail"
DETAIL: could not translate host name "!@#€%&%&(%#&())" to address: Name or service not known
LOCATION: connect_pg_server, connection.c:241
\set ON_ERROR_STOP 1
\c Test1
CREATE TABLE PUBLIC."testNs" (
@ -75,7 +96,7 @@ CREATE TABLE PUBLIC."testNs" (
latitude BIGINT NULL,
really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on BIGINT NULL
);
psql:cluster.sql:32: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
CREATE TABLE PUBLIC."testNs2" (
time BIGINT NOT NULL,
@ -85,19 +106,19 @@ CREATE TABLE PUBLIC."testNs2" (
latitude BIGINT NULL,
really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on BIGINT NULL
);
psql:cluster.sql:41: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
CREATE INDEX ON PUBLIC."testNs" ("Device_id", time DESC NULLS LAST) WHERE "Device_id" IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" (temp, time DESC NULLS LAST) WHERE temp IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" (really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on, time DESC NULLS LAST) WHERE really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on IS NOT NULL;
psql:cluster.sql:45: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
psql:cluster.sql:45: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
CREATE INDEX ON PUBLIC."testNs" (time DESC NULLS LAST, really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on) WHERE really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on IS NOT NULL;
psql:cluster.sql:46: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
psql:cluster.sql:46: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
SELECT * FROM create_hypertable('"public"."testNs"', 'time', 'Device_id');
create_hypertable
@ -107,7 +128,7 @@ SELECT * FROM create_hypertable('"public"."testNs"', 'time', 'Device_id');
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."testNs"', 'time', 'Device_id');
psql:cluster.sql:52: ERROR: IO110: hypertable public."testNs" already exists
ERROR: IO110: hypertable public."testNs" already exists
LOCATION: exec_stmt_raise, pl_exec.c:3165
\set ON_ERROR_STOP 1
SELECT * FROM create_hypertable('"public"."testNs2"', 'time', 'Device_id');
@ -337,16 +358,16 @@ FROM _iobeamdb_catalog.hypertable_column;
\set ON_ERROR_STOP 0
UPDATE _iobeamdb_catalog.cluster_user SET password = 'foo';
psql:cluster.sql:112: ERROR: IO101: Operation UPDATE not supported on _iobeamdb_catalog.cluster_user
ERROR: IO101: Operation UPDATE not supported on _iobeamdb_catalog.cluster_user
LOCATION: exec_stmt_raise, pl_exec.c:3165
UPDATE _iobeamdb_catalog.node SET active = FALSE;
psql:cluster.sql:113: ERROR: IO101: Operation UPDATE not supported on _iobeamdb_catalog.node
ERROR: IO101: Operation UPDATE not supported on _iobeamdb_catalog.node
LOCATION: exec_stmt_raise, pl_exec.c:3165
DELETE FROM _iobeamdb_catalog.meta WHERE TRUE;
psql:cluster.sql:114: ERROR: IO101: Operation DELETE not supported on _iobeamdb_catalog.meta
ERROR: IO101: Operation DELETE not supported on _iobeamdb_catalog.meta
LOCATION: exec_stmt_raise, pl_exec.c:3165
TRUNCATE TABLE _iobeamdb_catalog.meta;
psql:cluster.sql:115: ERROR: IO101: Operation TRUNCATE not supported on _iobeamdb_catalog.meta
ERROR: IO101: Operation TRUNCATE not supported on _iobeamdb_catalog.meta
LOCATION: exec_stmt_raise, pl_exec.c:3165
\set ON_ERROR_STOP 1
\des+
@ -614,7 +635,7 @@ Child tables: _iobeamdb_internal._hyper_3_0_replica
\c meta
SELECT _iobeamdb_meta.close_chunk_end(1);
psql:cluster.sql:134: WARNING: 01000: Cannot close an empty chunk table
WARNING: 01000: Cannot close an empty chunk table
LOCATION: exec_stmt_raise, pl_exec.c:3165
close_chunk_end
-----------------
@ -777,11 +798,11 @@ CREATE TABLE PUBLIC."testNsOnMeta" (
latitude BIGINT NULL,
really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on BIGINT NULL
);
psql:cluster.sql:158: NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
NOTICE: 42622: identifier "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_and_on_and_on" will be truncated to "really_long_column_goes_on_and_on_and_on_and_on_and_on_and_on_a"
LOCATION: truncate_identifier, scansup.c:205
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."testNsOnMeta"', 'time', 'Device_id');
psql:cluster.sql:161: ERROR: IO101: database not configured for hypertable storage (not setup as a data-node)
ERROR: IO101: database not configured for hypertable storage (not setup as a data-node)
LOCATION: exec_stmt_raise, pl_exec.c:3165
\set ON_ERROR_STOP 1
DROP TABLE PUBLIC."testNsOnMeta";

View File

@ -1,36 +1,61 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
setup_meta
------------
(1 row)
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
setup_main
------------
(1 row)
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
setup_main
------------
(1 row)
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user

View File

@ -1,21 +1,48 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\o /dev/null
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
\o
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user

View File

@ -1,21 +1,48 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\o /dev/null
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
\o
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user
@ -26,7 +53,7 @@ SELECT add_cluster_user('postgres', NULL);
-- Expect error when adding user again
\set ON_ERROR_STOP 0
SELECT add_cluster_user('postgres', NULL);
psql:ddl_errors.sql:16: ERROR: IO130: User postgres already exists
ERROR: IO130: User postgres already exists
LOCATION: exec_stmt_raise, pl_exec.c:3165
\set ON_ERROR_STOP 1
SELECT set_meta('meta' :: NAME, 'localhost');
@ -50,10 +77,10 @@ SELECT add_node('test2' :: NAME, 'localhost');
-- Expect error when adding node again
\set ON_ERROR_STOP 0
SELECT add_node('test2' :: NAME, 'localhost');
psql:ddl_errors.sql:25: ERROR: IO120: Node test2 already exists
ERROR: IO120: Node test2 already exists
LOCATION: exec_stmt_raise, pl_exec.c:3165
SELECT add_node('test2' :: NAME, 'otherhost');
psql:ddl_errors.sql:26: ERROR: IO120: Node test2 already exists
ERROR: IO120: Node test2 already exists
LOCATION: exec_stmt_raise, pl_exec.c:3165
\set ON_ERROR_STOP 1
\c Test1
@ -65,22 +92,22 @@ CREATE TABLE PUBLIC."Hypertable_1" (
CREATE INDEX ON PUBLIC."Hypertable_1" (time, "Device_id");
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Hypertable_1_mispelled"', 'time', 'Device_id');
psql:ddl_errors.sql:39: ERROR: 42P01: relation "public.Hypertable_1_mispelled" does not exist
ERROR: 42P01: relation "public.Hypertable_1_mispelled" does not exist
LINE 1: SELECT * FROM create_hypertable('"public"."Hypertable_1_misp...
^
LOCATION: RangeVarGetRelidExtended, namespace.c:415
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time_mispelled', 'Device_id');
psql:ddl_errors.sql:40: ERROR: IO102: column "time_mispelled" does not exist
ERROR: IO102: column "time_mispelled" does not exist
LOCATION: exec_stmt_raise, pl_exec.c:3165
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'Device_id', 'Device_id');
psql:ddl_errors.sql:41: ERROR: IO102: illegal type for time column "Device_id": text
ERROR: IO102: illegal type for time column "Device_id": text
LOCATION: exec_stmt_raise, pl_exec.c:3165
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id_mispelled');
psql:ddl_errors.sql:42: ERROR: IO102: column "Device_id_mispelled" does not exist
ERROR: IO102: column "Device_id_mispelled" does not exist
LOCATION: exec_stmt_raise, pl_exec.c:3165
INSERT INTO PUBLIC."Hypertable_1" VALUES(1,'dev_1', 3);
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id');
psql:ddl_errors.sql:46: ERROR: IO102: the table being converted to a hypertable must be empty
ERROR: IO102: the table being converted to a hypertable must be empty
LOCATION: exec_stmt_raise, pl_exec.c:3165
DELETE FROM PUBLIC."Hypertable_1" ;
\set ON_ERROR_STOP 1
@ -92,5 +119,5 @@ SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id');
\set ON_ERROR_STOP 0
SELECT * FROM create_hypertable('"public"."Hypertable_1"', 'time', 'Device_id');
psql:ddl_errors.sql:54: ERROR: IO110: hypertable public."Hypertable_1" already exists
ERROR: IO110: hypertable public."Hypertable_1" already exists
LOCATION: exec_stmt_raise, pl_exec.c:3165

View File

@ -1,9 +1,24 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\o /dev/null
\ir include/create_single_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS single;
SET client_min_messages = NOTICE;
CREATE DATABASE single;
\c single
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_single_db.sql:7: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_single_db.sql:7: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_single_db.sql:7: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
SELECT setup_meta();
SELECT setup_main();
\o
\set ECHO ALL
\c single
SELECT add_cluster_user('postgres', NULL);
add_cluster_user

116
test/expected/delete.out Normal file
View File

@ -0,0 +1,116 @@
\set ON_ERROR_STOP 1
\o /dev/null
\ir include/insert.sql
\set ON_ERROR_STOP 1
\ir create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
select setup_main();
\c meta
SELECT add_cluster_user('postgres', NULL);
SELECT set_meta('meta' :: NAME, 'localhost');
SELECT add_node('Test1' :: NAME, 'localhost');
SELECT add_node('test2' :: NAME, 'localhost');
\c Test1
CREATE TABLE PUBLIC."testNs" (
"timeCustom" BIGINT NOT NULL,
device_id TEXT NOT NULL,
series_0 DOUBLE PRECISION NULL,
series_1 DOUBLE PRECISION NULL,
series_2 DOUBLE PRECISION NULL,
series_bool BOOLEAN NULL
);
CREATE INDEX ON PUBLIC."testNs" (device_id, "timeCustom" DESC NULLS LAST) WHERE device_id IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_0) WHERE series_0 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_1) WHERE series_1 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_2) WHERE series_2 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_bool) WHERE series_bool IS NOT NULL;
SELECT * FROM create_hypertable('"public"."testNs"', 'timeCustom', 'device_id', associated_schema_name=>'_iobeamdb_internal' );
\c Test1
BEGIN;
\COPY public."testNs" FROM 'data/ds1_dev1_1.tsv' NULL AS '';
COMMIT;
SELECT _iobeamdb_meta_api.close_chunk_end_immediate(c.id)
FROM get_open_partition_for_key((SELECT id FROM _iobeamdb_catalog.hypertable WHERE table_name = 'testNs'), 'dev1') part
INNER JOIN _iobeamdb_catalog.chunk c ON (c.partition_id = part.id);
\c Test1
INSERT INTO public."testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257987600000000000, 'dev1', 1.5, 1),
(1257987600000000000, 'dev1', 1.5, 2),
(1257894000000000000, 'dev20', 1.5, 1),
(1257894002000000000, 'dev1', 2.5, 3);
\c test2
INSERT INTO "testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257894000000000000, 'dev20', 1.5, 2);
\c test2
CREATE TABLE chunk_closing_test(
time BIGINT,
metric INTEGER,
device_id TEXT
);
-- Test chunk closing/creation
SELECT * FROM create_hypertable('chunk_closing_test', 'time', 'device_id', chunk_size_bytes => 10000);
INSERT INTO chunk_closing_test VALUES(1, 1, 'dev1');
INSERT INTO chunk_closing_test VALUES(2, 2, 'dev2');
INSERT INTO chunk_closing_test VALUES(3, 3, 'dev3');
SELECT * FROM chunk_closing_test;
SELECT * FROM _iobeamdb_catalog.chunk c
LEFT JOIN _iobeamdb_catalog.chunk_replica_node crn ON (c.id = crn.chunk_id)
LEFT JOIN _iobeamdb_catalog.partition_replica pr ON (crn.partition_replica_id = pr.id)
LEFT JOIN _iobeamdb_catalog.hypertable h ON (pr.hypertable_id = h.id)
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_closing_test';
\o
\set ECHO ALL
\c test2
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000000000 | dev1 | 1.5 | 1 | 2 | t
1257894000000000000 | dev1 | 1.5 | 2 | |
1257894000000001000 | dev1 | 2.5 | 3 | |
1257894001000000000 | dev1 | 3.5 | 4 | |
1257897600000000000 | dev1 | 4.5 | 5 | | f
1257894002000000000 | dev1 | 2.5 | 3 | |
1257987600000000000 | dev1 | 1.5 | 1 | |
1257987600000000000 | dev1 | 1.5 | 2 | |
1257894000000000000 | dev20 | 1.5 | 1 | |
1257894000000000000 | dev20 | 1.5 | 2 | |
(10 rows)
DELETE FROM "testNs" WHERE series_0 = 1.5;
DELETE FROM "testNs" WHERE series_0 = 100;
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000001000 | dev1 | 2.5 | 3 | |
1257894001000000000 | dev1 | 3.5 | 4 | |
1257897600000000000 | dev1 | 4.5 | 5 | | f
1257894002000000000 | dev1 | 2.5 | 3 | |
(4 rows)

View File

@ -1,21 +1,48 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\o /dev/null
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
\o
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user

View File

@ -1,12 +1,92 @@
\set ON_ERROR_STOP 1
\o /dev/null
\ir include/insert.sql
\set ON_ERROR_STOP 1
\ir create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
select setup_main();
\c meta
SELECT add_cluster_user('postgres', NULL);
SELECT set_meta('meta' :: NAME, 'localhost');
SELECT add_node('Test1' :: NAME, 'localhost');
SELECT add_node('test2' :: NAME, 'localhost');
\c Test1
CREATE TABLE PUBLIC."testNs" (
"timeCustom" BIGINT NOT NULL,
device_id TEXT NOT NULL,
series_0 DOUBLE PRECISION NULL,
series_1 DOUBLE PRECISION NULL,
series_2 DOUBLE PRECISION NULL,
series_bool BOOLEAN NULL
);
CREATE INDEX ON PUBLIC."testNs" (device_id, "timeCustom" DESC NULLS LAST) WHERE device_id IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_0) WHERE series_0 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_1) WHERE series_1 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_2) WHERE series_2 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_bool) WHERE series_bool IS NOT NULL;
SELECT * FROM create_hypertable('"public"."testNs"', 'timeCustom', 'device_id', associated_schema_name=>'_iobeamdb_internal' );
\c Test1
BEGIN;
\COPY public."testNs" FROM 'data/ds1_dev1_1.tsv' NULL AS '';
COMMIT;
SELECT _iobeamdb_meta_api.close_chunk_end_immediate(c.id)
FROM get_open_partition_for_key((SELECT id FROM _iobeamdb_catalog.hypertable WHERE table_name = 'testNs'), 'dev1') part
INNER JOIN _iobeamdb_catalog.chunk c ON (c.partition_id = part.id);
\c Test1
INSERT INTO public."testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257987600000000000, 'dev1', 1.5, 1),
(1257987600000000000, 'dev1', 1.5, 2),
(1257894000000000000, 'dev20', 1.5, 1),
(1257894002000000000, 'dev1', 2.5, 3);
\c test2
INSERT INTO "testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257894000000000000, 'dev20', 1.5, 2);
\c test2
CREATE TABLE chunk_closing_test(
time BIGINT,
metric INTEGER,
device_id TEXT
);
-- Test chunk closing/creation
SELECT * FROM create_hypertable('chunk_closing_test', 'time', 'device_id', chunk_size_bytes => 10000);
INSERT INTO chunk_closing_test VALUES(1, 1, 'dev1');
INSERT INTO chunk_closing_test VALUES(2, 2, 'dev2');
INSERT INTO chunk_closing_test VALUES(3, 3, 'dev3');
SELECT * FROM chunk_closing_test;
SELECT * FROM _iobeamdb_catalog.chunk c
LEFT JOIN _iobeamdb_catalog.chunk_replica_node crn ON (c.id = crn.chunk_id)
LEFT JOIN _iobeamdb_catalog.partition_replica pr ON (crn.partition_replica_id = pr.id)
LEFT JOIN _iobeamdb_catalog.hypertable h ON (pr.hypertable_id = h.id)
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_closing_test';
\o
\set ECHO ALL
\c Test1
\d+ "_iobeamdb_internal".*
Index "_iobeamdb_internal.1-testNs_device_id_timeCustom_idx"

View File

@ -1,3 +1,5 @@
\set ON_ERROR_STOP 1
\set ECHO ALL
\ir include/insert.sql
\set ON_ERROR_STOP 1
\ir create_clustered_db.sql

View File

@ -1,3 +1,5 @@
\set ON_ERROR_STOP 1
\set ECHO ALL
\ir include/insert_single.sql
\set ON_ERROR_STOP 1
\ir create_single_db.sql
@ -292,9 +294,9 @@ INSERT INTO "1dim" VALUES('2017-01-20T09:00:21', 21.2);
INSERT INTO "1dim" VALUES('2017-01-20T09:00:47', 25.1);
SELECT * FROM "1dim";
time | temp
---------------------+------
2017-01-20 09:00:01 | 22.5
2017-01-20 09:00:21 | 21.2
2017-01-20 09:00:47 | 25.1
--------------------------+------
Fri Jan 20 09:00:01 2017 | 22.5
Fri Jan 20 09:00:21 2017 | 21.2
Fri Jan 20 09:00:47 2017 | 25.1
(3 rows)

View File

@ -1,21 +1,103 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\o /dev/null
\ir include/insert.sql
\set ON_ERROR_STOP 1
\ir create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
\c meta
SELECT add_cluster_user('postgres', NULL);
SELECT set_meta('meta' :: NAME, 'localhost');
SELECT add_node('Test1' :: NAME, 'localhost');
SELECT add_node('test2' :: NAME, 'localhost');
\c Test1
CREATE TABLE PUBLIC."testNs" (
"timeCustom" BIGINT NOT NULL,
device_id TEXT NOT NULL,
series_0 DOUBLE PRECISION NULL,
series_1 DOUBLE PRECISION NULL,
series_2 DOUBLE PRECISION NULL,
series_bool BOOLEAN NULL
);
CREATE INDEX ON PUBLIC."testNs" (device_id, "timeCustom" DESC NULLS LAST) WHERE device_id IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_0) WHERE series_0 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_1) WHERE series_1 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_2) WHERE series_2 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_bool) WHERE series_bool IS NOT NULL;
SELECT * FROM create_hypertable('"public"."testNs"', 'timeCustom', 'device_id', associated_schema_name=>'_iobeamdb_internal' );
\c Test1
BEGIN;
\COPY public."testNs" FROM 'data/ds1_dev1_1.tsv' NULL AS '';
COMMIT;
SELECT _iobeamdb_meta_api.close_chunk_end_immediate(c.id)
FROM get_open_partition_for_key((SELECT id FROM _iobeamdb_catalog.hypertable WHERE table_name = 'testNs'), 'dev1') part
INNER JOIN _iobeamdb_catalog.chunk c ON (c.partition_id = part.id);
\c Test1
INSERT INTO public."testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257987600000000000, 'dev1', 1.5, 1),
(1257987600000000000, 'dev1', 1.5, 2),
(1257894000000000000, 'dev20', 1.5, 1),
(1257894002000000000, 'dev1', 2.5, 3);
\c test2
INSERT INTO "testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257894000000000000, 'dev20', 1.5, 2);
\c test2
CREATE TABLE chunk_closing_test(
time BIGINT,
metric INTEGER,
device_id TEXT
);
-- Test chunk closing/creation
SELECT * FROM create_hypertable('chunk_closing_test', 'time', 'device_id', chunk_size_bytes => 10000);
INSERT INTO chunk_closing_test VALUES(1, 1, 'dev1');
INSERT INTO chunk_closing_test VALUES(2, 2, 'dev2');
INSERT INTO chunk_closing_test VALUES(3, 3, 'dev3');
SELECT * FROM chunk_closing_test;
SELECT * FROM _iobeamdb_catalog.chunk c
LEFT JOIN _iobeamdb_catalog.chunk_replica_node crn ON (c.id = crn.chunk_id)
LEFT JOIN _iobeamdb_catalog.partition_replica pr ON (crn.partition_replica_id = pr.id)
LEFT JOIN _iobeamdb_catalog.hypertable h ON (pr.hypertable_id = h.id)
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_closing_test';
\o
\set ECHO ALL
\c postgres
\! pg_dump -h localhost -U postgres -Fc Test1 > dump/Test1.sql
\! pg_dump -h localhost -U postgres -Fc test2 > dump/test2.sql

View File

@ -1,12 +1,92 @@
\set ON_ERROR_STOP 1
\o /dev/null
\ir include/insert.sql
\set ON_ERROR_STOP 1
\ir create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
select setup_main();
\c meta
SELECT add_cluster_user('postgres', NULL);
SELECT set_meta('meta' :: NAME, 'localhost');
SELECT add_node('Test1' :: NAME, 'localhost');
SELECT add_node('test2' :: NAME, 'localhost');
\c Test1
CREATE TABLE PUBLIC."testNs" (
"timeCustom" BIGINT NOT NULL,
device_id TEXT NOT NULL,
series_0 DOUBLE PRECISION NULL,
series_1 DOUBLE PRECISION NULL,
series_2 DOUBLE PRECISION NULL,
series_bool BOOLEAN NULL
);
CREATE INDEX ON PUBLIC."testNs" (device_id, "timeCustom" DESC NULLS LAST) WHERE device_id IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_0) WHERE series_0 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_1) WHERE series_1 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_2) WHERE series_2 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_bool) WHERE series_bool IS NOT NULL;
SELECT * FROM create_hypertable('"public"."testNs"', 'timeCustom', 'device_id', associated_schema_name=>'_iobeamdb_internal' );
\c Test1
BEGIN;
\COPY public."testNs" FROM 'data/ds1_dev1_1.tsv' NULL AS '';
COMMIT;
SELECT _iobeamdb_meta_api.close_chunk_end_immediate(c.id)
FROM get_open_partition_for_key((SELECT id FROM _iobeamdb_catalog.hypertable WHERE table_name = 'testNs'), 'dev1') part
INNER JOIN _iobeamdb_catalog.chunk c ON (c.partition_id = part.id);
\c Test1
INSERT INTO public."testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257987600000000000, 'dev1', 1.5, 1),
(1257987600000000000, 'dev1', 1.5, 2),
(1257894000000000000, 'dev20', 1.5, 1),
(1257894002000000000, 'dev1', 2.5, 3);
\c test2
INSERT INTO "testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257894000000000000, 'dev20', 1.5, 2);
\c test2
CREATE TABLE chunk_closing_test(
time BIGINT,
metric INTEGER,
device_id TEXT
);
-- Test chunk closing/creation
SELECT * FROM create_hypertable('chunk_closing_test', 'time', 'device_id', chunk_size_bytes => 10000);
INSERT INTO chunk_closing_test VALUES(1, 1, 'dev1');
INSERT INTO chunk_closing_test VALUES(2, 2, 'dev2');
INSERT INTO chunk_closing_test VALUES(3, 3, 'dev3');
SELECT * FROM chunk_closing_test;
SELECT * FROM _iobeamdb_catalog.chunk c
LEFT JOIN _iobeamdb_catalog.chunk_replica_node crn ON (c.id = crn.chunk_id)
LEFT JOIN _iobeamdb_catalog.partition_replica pr ON (crn.partition_replica_id = pr.id)
LEFT JOIN _iobeamdb_catalog.hypertable h ON (pr.hypertable_id = h.id)
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_closing_test';
\o
\set ECHO ALL
\c Test1
SELECT * FROM PUBLIC."testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool

View File

@ -1,36 +1,61 @@
\set ON_ERROR_STOP 1
\set VERBOSITY verbose
\set SHOW_CONTEXT never
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:12: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_meta();
setup_meta
------------
(1 row)
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:17: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
setup_main
------------
(1 row)
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "dblink"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "postgres_fdw"
LOCATION: CreateExtensionInternal, extension.c:1441
psql:include/create_clustered_db.sql:23: NOTICE: 00000: installing required extension "hstore"
LOCATION: CreateExtensionInternal, extension.c:1441
select setup_main();
setup_main
------------
(1 row)
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user
@ -58,7 +83,7 @@ SELECT add_node('test2' :: NAME, 'localhost');
\c Test1
--test hypertable with tables space
create tablespace tspace1 location '/var/lib/postgresql/data/tests/tspace1';
create tablespace tspace1 location :TEST_TABLESPACE_PATH;
create table test_tspace(time timestamp, temp float, device_id text) tablespace tspace1;
select create_hypertable('test_tspace', 'time', 'device_id');
create_hypertable

View File

@ -1,12 +1,37 @@
\set ON_ERROR_STOP 1
\o /dev/null
\ir include/create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
select setup_main();
\o
\set ECHO ALL
\c meta
SELECT add_cluster_user('postgres', NULL);
add_cluster_user
@ -77,12 +102,12 @@ INSERT INTO PUBLIC."testNs"("timeCustom", device_id, series_0, series_1) VALUES
('2009-11-10T23:00:00+00:00', 'dev2', 1.5, 2);
SELECT * FROM PUBLIC."testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
2009-11-12 01:00:00 | dev1 | 1.5 | 1 | |
2009-11-12 01:00:00 | dev1 | 1.5 | 2 | |
2009-11-10 23:00:02 | dev1 | 2.5 | 3 | |
2009-11-10 23:00:00 | dev2 | 1.5 | 1 | |
2009-11-10 23:00:00 | dev2 | 1.5 | 2 | |
--------------------------+-----------+----------+----------+----------+-------------
Thu Nov 12 01:00:00 2009 | dev1 | 1.5 | 1 | |
Thu Nov 12 01:00:00 2009 | dev1 | 1.5 | 2 | |
Tue Nov 10 23:00:02 2009 | dev1 | 2.5 | 3 | |
Tue Nov 10 23:00:00 2009 | dev2 | 1.5 | 1 | |
Tue Nov 10 23:00:00 2009 | dev2 | 1.5 | 2 | |
(5 rows)
SET client_min_messages = WARNING;
@ -92,16 +117,16 @@ SET timezone = 'UTC';
SELECT date_group("timeCustom", '100 days') AS time, sum(series_0)
FROM PUBLIC."testNs" GROUP BY time ORDER BY time ASC;
time | sum
---------------------+-----
2009-09-13 00:00:00 | 8.5
--------------------------+-----
Sun Sep 13 00:00:00 2009 | 8.5
(1 row)
SET timezone = 'EST';
SELECT date_group("timeCustom", '100 days') AS time, sum(series_0)
FROM PUBLIC."testNs" GROUP BY time ORDER BY time ASC;
time | sum
---------------------+-----
2009-09-12 19:00:00 | 8.5
--------------------------+-----
Sat Sep 12 19:00:00 2009 | 8.5
(1 row)
\echo 'The rest of the queries will be the same in output between UTC and EST'
@ -117,9 +142,9 @@ SELECT dblink_disconnect(conn) FROM unnest(dblink_get_connections()) conn;
SELECT date_group("timeCustom", '1 day') AS time, sum(series_0)
FROM PUBLIC."testNs" GROUP BY time ORDER BY time ASC;
time | sum
---------------------+-----
2009-11-10 00:00:00 | 5.5
2009-11-12 00:00:00 | 3
--------------------------+-----
Tue Nov 10 00:00:00 2009 | 5.5
Thu Nov 12 00:00:00 2009 | 3
(2 rows)
SET timezone = 'EST';
@ -132,9 +157,9 @@ SELECT dblink_disconnect(conn) FROM unnest(dblink_get_connections()) conn;
SELECT date_group("timeCustom", '1 day') AS time, sum(series_0)
FROM PUBLIC."testNs" GROUP BY time ORDER BY time ASC;
time | sum
---------------------+-----
2009-11-09 19:00:00 | 5.5
2009-11-11 19:00:00 | 3
--------------------------+-----
Mon Nov 09 19:00:00 2009 | 5.5
Wed Nov 11 19:00:00 2009 | 3
(2 rows)
SET timezone = 'UTC';
@ -149,10 +174,10 @@ FROM PUBLIC."testNs"
WHERE "timeCustom" >= TIMESTAMP '2009-11-10T23:00:00'
AND "timeCustom" < TIMESTAMP '2009-11-12T01:00:00' ORDER BY "timeCustom" DESC;
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
2009-11-10 23:00:02 | dev1 | 2.5 | 3 | |
2009-11-10 23:00:00 | dev2 | 1.5 | 1 | |
2009-11-10 23:00:00 | dev2 | 1.5 | 2 | |
--------------------------+-----------+----------+----------+----------+-------------
Tue Nov 10 23:00:02 2009 | dev1 | 2.5 | 3 | |
Tue Nov 10 23:00:00 2009 | dev2 | 1.5 | 1 | |
Tue Nov 10 23:00:00 2009 | dev2 | 1.5 | 2 | |
(3 rows)
SET timezone = 'EST';
@ -167,10 +192,10 @@ FROM PUBLIC."testNs"
WHERE "timeCustom" >= TIMESTAMP '2009-11-10T23:00:00'
AND "timeCustom" < TIMESTAMP '2009-11-12T01:00:00' ORDER BY "timeCustom" DESC;
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
2009-11-10 23:00:02 | dev1 | 2.5 | 3 | |
2009-11-10 23:00:00 | dev2 | 1.5 | 1 | |
2009-11-10 23:00:00 | dev2 | 1.5 | 2 | |
--------------------------+-----------+----------+----------+----------+-------------
Tue Nov 10 23:00:02 2009 | dev1 | 2.5 | 3 | |
Tue Nov 10 23:00:00 2009 | dev2 | 1.5 | 1 | |
Tue Nov 10 23:00:00 2009 | dev2 | 1.5 | 2 | |
(3 rows)
SET timezone = 'UTC';
@ -183,9 +208,9 @@ SELECT dblink_disconnect(conn) FROM unnest(dblink_get_connections()) conn;
SELECT date_group("timeCustom", '1 day') AS time, sum(series_0)
FROM PUBLIC."testNs" GROUP BY time ORDER BY time ASC LIMIT 2;
time | sum
---------------------+-----
2009-11-10 00:00:00 | 5.5
2009-11-12 00:00:00 | 3
--------------------------+-----
Tue Nov 10 00:00:00 2009 | 5.5
Thu Nov 12 00:00:00 2009 | 3
(2 rows)
SET timezone = 'EST';
@ -198,8 +223,8 @@ SELECT dblink_disconnect(conn) FROM unnest(dblink_get_connections()) conn;
SELECT date_group("timeCustom", '1 day') AS time, sum(series_0)
FROM PUBLIC."testNs" GROUP BY time ORDER BY time ASC LIMIT 2;
time | sum
---------------------+-----
2009-11-09 19:00:00 | 5.5
2009-11-11 19:00:00 | 3
--------------------------+-----
Mon Nov 09 19:00:00 2009 | 5.5
Wed Nov 11 19:00:00 2009 | 3
(2 rows)

122
test/expected/update.out Normal file
View File

@ -0,0 +1,122 @@
\set ON_ERROR_STOP 1
\o /dev/null
\ir include/insert.sql
\set ON_ERROR_STOP 1
\ir create_clustered_db.sql
SET client_min_messages = WARNING;
DROP DATABASE IF EXISTS meta;
DROP DATABASE IF EXISTS "Test1";
DROP DATABASE IF EXISTS test2;
SET client_min_messages = NOTICE;
CREATE DATABASE meta;
CREATE DATABASE "Test1";
CREATE DATABASE test2;
\c meta
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:12: NOTICE: installing required extension "hstore"
select setup_meta();
\c Test1
CREATE SCHEMA io_test;
CREATE EXTENSION IF NOT EXISTS iobeamdb SCHEMA io_test CASCADE;
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:17: NOTICE: installing required extension "hstore"
ALTER DATABASE "Test1" SET search_path = "io_test";
SET search_path = 'io_test';
select setup_main();
\c test2
CREATE EXTENSION IF NOT EXISTS iobeamdb CASCADE;
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "dblink"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "postgres_fdw"
psql:include/create_clustered_db.sql:23: NOTICE: installing required extension "hstore"
select setup_main();
\c meta
SELECT add_cluster_user('postgres', NULL);
SELECT set_meta('meta' :: NAME, 'localhost');
SELECT add_node('Test1' :: NAME, 'localhost');
SELECT add_node('test2' :: NAME, 'localhost');
\c Test1
CREATE TABLE PUBLIC."testNs" (
"timeCustom" BIGINT NOT NULL,
device_id TEXT NOT NULL,
series_0 DOUBLE PRECISION NULL,
series_1 DOUBLE PRECISION NULL,
series_2 DOUBLE PRECISION NULL,
series_bool BOOLEAN NULL
);
CREATE INDEX ON PUBLIC."testNs" (device_id, "timeCustom" DESC NULLS LAST) WHERE device_id IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_0) WHERE series_0 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_1) WHERE series_1 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_2) WHERE series_2 IS NOT NULL;
CREATE INDEX ON PUBLIC."testNs" ("timeCustom" DESC NULLS LAST, series_bool) WHERE series_bool IS NOT NULL;
SELECT * FROM create_hypertable('"public"."testNs"', 'timeCustom', 'device_id', associated_schema_name=>'_iobeamdb_internal' );
\c Test1
BEGIN;
\COPY public."testNs" FROM 'data/ds1_dev1_1.tsv' NULL AS '';
COMMIT;
SELECT _iobeamdb_meta_api.close_chunk_end_immediate(c.id)
FROM get_open_partition_for_key((SELECT id FROM _iobeamdb_catalog.hypertable WHERE table_name = 'testNs'), 'dev1') part
INNER JOIN _iobeamdb_catalog.chunk c ON (c.partition_id = part.id);
\c Test1
INSERT INTO public."testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257987600000000000, 'dev1', 1.5, 1),
(1257987600000000000, 'dev1', 1.5, 2),
(1257894000000000000, 'dev20', 1.5, 1),
(1257894002000000000, 'dev1', 2.5, 3);
\c test2
INSERT INTO "testNs"("timeCustom", device_id, series_0, series_1) VALUES
(1257894000000000000, 'dev20', 1.5, 2);
\c test2
CREATE TABLE chunk_closing_test(
time BIGINT,
metric INTEGER,
device_id TEXT
);
-- Test chunk closing/creation
SELECT * FROM create_hypertable('chunk_closing_test', 'time', 'device_id', chunk_size_bytes => 10000);
INSERT INTO chunk_closing_test VALUES(1, 1, 'dev1');
INSERT INTO chunk_closing_test VALUES(2, 2, 'dev2');
INSERT INTO chunk_closing_test VALUES(3, 3, 'dev3');
SELECT * FROM chunk_closing_test;
SELECT * FROM _iobeamdb_catalog.chunk c
LEFT JOIN _iobeamdb_catalog.chunk_replica_node crn ON (c.id = crn.chunk_id)
LEFT JOIN _iobeamdb_catalog.partition_replica pr ON (crn.partition_replica_id = pr.id)
LEFT JOIN _iobeamdb_catalog.hypertable h ON (pr.hypertable_id = h.id)
WHERE h.schema_name = 'public' AND h.table_name = 'chunk_closing_test';
\o
\set ECHO ALL
\c test2
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000000000 | dev1 | 1.5 | 1 | 2 | t
1257894000000000000 | dev1 | 1.5 | 2 | |
1257894000000001000 | dev1 | 2.5 | 3 | |
1257894001000000000 | dev1 | 3.5 | 4 | |
1257897600000000000 | dev1 | 4.5 | 5 | | f
1257894002000000000 | dev1 | 2.5 | 3 | |
1257987600000000000 | dev1 | 1.5 | 1 | |
1257987600000000000 | dev1 | 1.5 | 2 | |
1257894000000000000 | dev20 | 1.5 | 1 | |
1257894000000000000 | dev20 | 1.5 | 2 | |
(10 rows)
UPDATE "testNs" SET series_1 = 47;
UPDATE "testNs" SET series_bool = true;
SELECT * FROM "testNs";
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
---------------------+-----------+----------+----------+----------+-------------
1257894000000000000 | dev1 | 1.5 | 47 | 2 | t
1257894000000000000 | dev1 | 1.5 | 47 | | t
1257894000000001000 | dev1 | 2.5 | 47 | | t
1257894001000000000 | dev1 | 3.5 | 47 | | t
1257897600000000000 | dev1 | 4.5 | 47 | | t
1257894002000000000 | dev1 | 2.5 | 47 | | t
1257987600000000000 | dev1 | 1.5 | 47 | | t
1257987600000000000 | dev1 | 1.5 | 47 | | t
1257894000000000000 | dev20 | 1.5 | 47 | | t
1257894000000000000 | dev20 | 1.5 | 47 | | t
(10 rows)

16
test/runner.sh Executable file
View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -u
set -e
PG_REGRESS_PSQL=$1
shift
PSQL=${PSQL:-$PG_REGRESS_PSQL}
TEST_TABLESPACE_PATH=${TEST_TABLESPACE_PATH:-/tmp/tspace1}
cd test/sql
PG_PROC_USER=$(ps u | awk '/postgres/ { print $1; exit }')
mkdir -p ${TEST_TABLESPACE_PATH}
mkdir -p dump
exec ${PSQL} -v ON_ERROR_STOP=1 -v TEST_TABLESPACE_PATH=\'${TEST_TABLESPACE_PATH}\' $@

View File

@ -16,7 +16,6 @@ SELECT add_node('test2' :: NAME, 'localhost');
\set ON_ERROR_STOP 0
SELECT add_node('should_fail' :: NAME, 'localhost', -1);
SELECT add_node('should_fail' :: NAME, '!@#€%&%&(%#&())', 5432);
\set ON_ERROR_STOP 1

Some files were not shown because too many files have changed in this diff Show More