Как вставить запись в Postgres из Node.js? node-pg плохо документирован
1. Обобщите проблему.
Мне нужно вставить данные в Postgres из node-pg. Существует столбец первичного ключа, созданный с помощью "серийного номера".
Документации node-pg очень не хватает, большинство таблиц, которые я вижу в производстве, имеют первичный ключ с автоинкрементом и где-то поле даты, пример в документации не содержит примеров, кроме двух текстовых полей (имя, адрес электронной почты).
Необходимо сделать что-то другое, помимо того, что показано в любом примере, который я могу найти где угодно, чтобы вставить запись / строку с идентификатором автоинкремента, полем даты и типом географических данных (широта, долгота).
Если я смогу просто получить запись с работающим автоматически увеличивающимся идентификатором, буду счастлив и перейду к следующему шагу, пытаясь вставить поле TIMESTAMP, а затем геокод.
2. Предоставьте информацию о том, что вы уже пробовали.
Я прочитал документацию по node-pg, я опубликовал проблему в области github без ответа, я прочитал около дюжины статей, и авторы обычно ленивы и не предоставляют пример для наиболее распространенного реального сценария вставки строка с автоинкрементным первичным ключом / идентификатором и хотя бы одним полем даты.
Все примеры вставляют только два текстовых поля. Возможно, node-pg не используется в производственной среде предприятия, где реляционная целостность очень важна, я не знаю, но это разочаровывает.
3. Покажите код
Вот таблица создания.sql
CREATE TABLE address (
id serial PRIMARY KEY,
client_id integer not null,
property_id integer not null,
street1 varchar(40),
street2 varchar(40),
city varchar(30),
state_ab char(2),
zip varchar(10)
);
// verified_date TIMESTAMP, //no example on how to with node-pg
proc_db=> \d address
Table "proc.address"
Column | Type | Modifiers
--------------------+-----------------------+------------------------------------------------------
id | integer | not null default nextval('address_id_seq'::regclass)
client_id | integer | not null
client_property_id | integer | not null
street1 | character varying(40) |
street2 | character varying(40) |
city | character varying(30) |
state_ab | character(2) |
zip | character varying(10) |
Вот код node-pg, который работает без ошибок, ошибки не отображаются, но он также ничего не вставляет.
function test_insert() {
const text = 'INSERT INTO address ('
+ ' id,'
+ ' client_id,'
+ ' client_property_id,'
+ ' street1,'
+ ' street2,'
+ ' city,'
+ ' state,'
+ ' zip)'
+ ' VALUES(DEFAULT, $1, $2, $3, $4, $5, $6, $7) RETURNING *';
//+ ' verified_date) VALUES(DEFAULT, $1, $2, $3, $4, $5, $6, $7, $8) RETURNING *'; //inserting TIMESTAMP not working either, one step at a time.
//const now = Date();
const values = [
101,
1001,
'1600 Amphitheatre Parkway',
'',
'Mountain View',
'CA',
'94043'];
client
.query(text, values)
.then(res => {
console.log(res.rows[0])
})
.catch(e => console.error(e.stack))
}
test_insert()
4. Опишите ожидаемые и фактические результаты, включая сообщения об ошибках.
Данные не вставлены, я бы ожидал сообщение об ошибке, но его нет. Приведенный пример взят непосредственно из документации node-pg, но не работает.
Для начала мне нужно вставить строку с автоматическим приращением, и в качестве продолжения, если кто-то хочет вмешаться, мне нужно добавить поле, которое является TIMESTAMP
Я понятия не имею, почему не печатается сообщение об ошибке или почему вставка не работает и не работает.