我正在使用Postgres 9.5并在这里看到一些有线的东西.
我有一个cron作业运行5分钟,触发一个sql语句,如果不存在则添加一个记录列表.
INSERT INTO
sometable (customer, balance)
VALUES
(:customer, :balance)
ON CONFLICT (customer) DO NOTHING
Run Code Online (Sandbox Code Playgroud)
sometable.customer是主键(文本)
sometable结构是:
id:serial
customer:text
balance:bigint
现在似乎每次这个作业运行时,id字段都会以静默方式递增+1.所以下次,我真的添加一个字段,它比我上一个值高出数千个数字.我认为这个查询检查冲突,如果是这样,什么都不做,但目前似乎它试图插入记录,增加id然后停止.
有什么建议?
我正在尝试在 PostgreSQL 中实现多对多关系。这是我的数据库中的表:
CREATE TABLE products (
product_id serial PRIMARY KEY
, product_name varchar NOT NULL
);
CREATE TABLE orders (
order_id serial PRIMARY KEY
, order_name varchar NOT NULL
);
CREATE TABLE product_order (
product_id int REFERENCES products
, order_id int REFERENCES orders
, PRIMARY KEY (product_id, order_id)
);
Run Code Online (Sandbox Code Playgroud)
products 和orders 表中不会有任何UPDATE 或DELETE,因此不需要ON DELETE 和ON UPDATE 语句。
我还创建了两个哈希索引,以便我可以搜索订单和产品名称并将其 id 存储在表中:
CREATE INDEX product_index ON products USING hash(product_name);
CREATE INDEX order_index ON orders USING hash(order_name);
Run Code Online (Sandbox Code Playgroud)
这就是我想做的: