Postgres метка времени столбца имеет тип timestamp, но выражение имеет тип text - PullRequest
0 голосов
/ 17 марта 2020

Я только начал работать с PostgreSQL для базы данных временных рядов с использованием временной шкалы. Прежде чем использовать шкалу времени, я хотел настроить небольшой тест для вставки данных. Вставляя данные из c# в таблицу базы данных postgres, я столкнулся со следующей ошибкой:

column "timestamp" is of type timestamp without time zone but expression is of type text

Я просматривал документацию postgres, но не смог найти решение.

это моя таблица:

CREATE TABLE measurement_ms (
    id SERIAL PRIMARY KEY,
    value VARCHAR(255) NULL,
    timestamp TIMESTAMP(6) NULL,
    machine_id INT NOT NULL,
    measurement_type_id INT NOT NULL,
    point_of_measurement_id INT NOT NULL,
    FOREIGN KEY (machine_id) REFERENCES machine (id),
    FOREIGN KEY (measurement_type_id) REFERENCES measurement_type (id),
    FOREIGN KEY (point_of_measurement_id) REFERENCES point_of_measurement (id)
);

и это код в c#, который я использую для вставки данных в таблицу:

 NpgsqlCommand addMeasurementQuery = new NpgsqlCommand("INSERT INTO measurement_ms (value, timestamp, machine_id, measurement_type_id, point_of_measurement_id) values(@value, @timestamp, @machine_id, @measurement_type_id, @point_of_measurement_id)", connection);
            addMeasurementQuery.Parameters.AddWithValue("@value", value);
            addMeasurementQuery.Parameters.AddWithValue("@timestamp", timestamp.ToString("YYYY-MM-DD HH:MI:SS:MS"));
            addMeasurementQuery.Parameters.AddWithValue("@machine_id", fk_machineID);
            addMeasurementQuery.Parameters.AddWithValue("@measurement_type_id", fk_pointOfMeasurementID);
            addMeasurementQuery.Parameters.AddWithValue("@point_of_measurement_id", fk_measurementTypeID);
            addMeasurementQuery.ExecuteNonQuery();

Может кто-нибудь дать пу sh в правильном направлении, чтобы решить эту проблему? Я думаю, что я могу отформатировать метку времени неправильно, но я не уверен.

1 Ответ

0 голосов
/ 18 марта 2020

После дополнительного исследования этой проблемы я нашел следующее решение: я попробовал то, что сказал Дэн в комментариях, но не смог заставить его работать.

NpgsqlCommand addMeasurementQuery = new NpgsqlCommand("INSERT INTO verbruggen_iot.measurement_ms (value, timestamp, machine_id, measurement_type_id, point_of_measurement_id) values(@value, CAST(@timestamp as timestamp), @machine_id, @measurement_type_id, @point_of_measurement_id)", connection);

Разница между запросом в вопросе и этим заключается в том, что я произвел метку времени следующим образом:

CAST(@timestamp as timestamp)

Используя приведенный выше оператор i Я все еще могу выполнить остальную часть моего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...