我正在尝试创建一个标准函数来插入产品或添加现有产品的数量,到目前为止,我有以下内容:
CREATE OR REPLACE FUNCTION insert_materials (IN _ASADAFK VARCHAR(40), _material VARCHAR(40), _stock INT)
RETURNS void AS
$$
BEGIN
IF EXISTS (SELECT material FROM materials WHERE material= _material)
THEN
update materials set stock= (stock + _sto
PetaPoco/Npgsql在带有表触发器的insert上失败。
我认为这非常类似于,不同之处在于,这个问题是针对SQL 2008的,而我的问题是使用带有多个触发器的表的Npgsql C#驱动程序的PostgreSQL 9.5.4。我的情况是在PostgreSQL中定义了具有多个触发器的表,如下所示:
CREATE TABLE procedures
(
recid serial NOT NULL,
orderno integer NOT NULL,
torder timestamp without time zone NOT NULL DEFAULT now(),
cpt_r
是否有可能配置Postgres数据库,使特定列只能由触发器更新,同时仍然允许在没有权限更新该列的情况下由角色响应更新执行触发器本身?如果是这样的话,是怎么做的?
例如,给定这样的表和触发器:
CREATE TABLE a(
id serial PRIMARY KEY,
flag boolean NOT NULL DEFAULT TRUE,
data text NOT NULL
);
CREATE TABLE b(
id serial PRIMARY KEY,
updated_on DATE NOT NULL DEFAULT CURRENT_DATE,
a_id INT
我试图在相当并发的代码中运行Postgres UPSERT。当我的服务处于加载状态时,我一直在看到一个duplicate key value violates unique constraint错误。
作为一个简化的例子,我有下表,它有一个id主键和一个id_secondary唯一键(意思是作为第二个ID)
CREATE TABLE "test_table" (
"id" text NOT NULL,
"id_secondary" text NOT NULL,
"value" bool NOT NULL D
在rails应用程序中,我正在尝试在postgres中为现有数据添加fts。以下是我所做的工作:
class AddNameFtsIndexToCompanies < ActiveRecord::Migration
def up
execute(<<-'eosql'.strip)
DROP INDEX IF EXISTS index_companies_name;
CREATE INDEX index_companies_name
ON companies
USING gin( (to_tsvect
我使用INSERT INTO ON CONFLICT DO UPDATE来实现,如果行还不存在,则执行INSERT,如果行存在,则执行UPDATE,但是在每次更新时,我希望添加一个字段的值。
假定表(test_table)只有两列,它们的名称是:name(带UNIQUE约束)和count,INSERT如下:
values ('postgres',10)
10次,那么我希望结果是:
name count
postgres 100
如何编写SQL?下面是我使用的代码:
INSERT INTO test_table(name,count)
VALUES (&
我使用SQL Server 2014,需要更新一个表中新添加的datetime类型列。有两个相关的表(都有超过3000万条记录):
TableA:
CategoryID, itemID, dataCreated, deleted, some other string properties.
此表包含具有不同datecreated的每个项目的多个记录。
TableB:
CategoryID, itemID, LatestUpdatedDate (This is the new added column)
categoryID和itemID都是该表的索引的一部分。
为了从匹配的CategoryI
我创建了这个表:
CREATE TABLE IF NOT EXISTS config_activity_log
(
id serial primary key,
activity_name varchar(100) NOT NULL,
last_config_version varchar(50) NOT NULL,
activity_status varchar(100) NOT NULL DEFAULT 'Awaiting for cofman',
cofman_las
我试图在相当并发的代码中运行Postgres UPSERT。当我的服务处于加载状态时,我一直在看到一个duplicate key value violates unique constraint错误。
作为一个简化的例子,我有下表,它有一个id主键和一个id_secondary唯一键(意思是作为第二个ID)
CREATE TABLE "test_table" (
"id" text NOT NULL,
"id_secondary" text NOT NULL,
"value" bool NOT NULL D
我有一个表(Users),其中的列如下
id INT AUTOINVREMENT PRIMARY
uid INT index
email CHAR(128) UNIQUE
activated TINYINT
我需要像这样查询这个表:
SELECT * FROM users WHERE uid = ? AND activated = 1
我的问题是,既然在'uid‘列上设置了一个索引,为了获得上述查询的最佳性能,我是否也需要为'activated’列设置另一个索引?这个表(将是一个大表)将被“INSERT”、“UPDATE”语句以及“SELECT”语句大量访问。
正如我从其他来
我试图在UPDATE语句中的UPDATE中使用PostgreSQL的RETURNING子句,结果遇到了麻烦。
Postgres允许插入中的查询子句,例如:
INSERT INTO films
SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
我想使用UPDATE的返回子句作为INSERT的查询子句,例如:
INSERT INTO user_status_history(status)
UPDATE user_status SET status = 'ACTIVE' WHERE status =
将DB2命令转换为Postgres命令。
db2 IMPORT FROM test.csv OF DEL MODIFIED BY USEDEFAULTS COMMITCOUNT 100000 "INSERT_UPDATE INTO TEST.person (name,old,sex)" > ${TEMPTXT}
我如何使用postgres命令来做与这个db2命令相同的事情,从文件导入以插入和更新表?
我知道这个问题已经问过很多次了,但是我真的很难把这些答案应用到这个问题上。
我正在使用MariaDB工作台将一个数据库从Postgres迁移到MySQL。
这是我遇到麻烦的桌子
CREATE TABLE IF NOT EXISTS `postgres`.`oldimage` (
`oi_name` LONGTEXT NOT NULL,
`oi_archive_name` LONGTEXT NOT NULL,
`oi_size` INT NOT NULL,
`oi_width` INT NOT NULL,
`oi_height` INT NOT NULL,
`oi_bit
我授予public选择、更新、插入和删除权限。
但是当我试图从公众中撤销删除时,什么都没发生。
我仍然能够删除表的行。
在此之前:
ALTER TABLE ref_access_type
OWNER TO postgres;
GRANT ALL ON TABLE ref_access_type TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE ref_access_type TO public;
执行后:
REVOKE DELETE ON TABLE table_name FROM public;
ALTER TABLE
我正在尝试将Oracle查询迁移到PostgreSql。正如文章中所描述的,Postgres语法支持一个"where子句“来识别冲突的条件。
不幸的是,该网页没有提供"where子句“的示例。我试着在其他地方寻找它,但找不到。因此,这个问题。
按照上述给定网页中的相同示例,下面是一个示例设置:
CREATE TABLE customers (
customer_id serial PRIMARY KEY,
name VARCHAR UNIQUE,
email VARCHAR NOT NULL,
active bool NOT NULL DEFAU
我们可以使用postgres中的RAISE NOTICE作为RAISERROR 'message的等价物来显示SQL Server中的WITH NOWAIT吗?或者有没有一种更好的方法在postgres查询运行时打印中间消息?请建议是否有更好的方法在postgres中打印运行时消息。
INSERT INTO tbl1 (col1) values (val1);
DO $$
begin
raise notice 'insert tbl1 done!';
end;
$$;
UPDATE tbl2 set col2='val2' where ...;
DO $
我有这样一张表:
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET d
我有一个由user_id、item_id、test列构成的表
我想做一个INSERT/UPDATE查询,这样如果在user_id和item_id中传递的组合已经在表的一行中找到,它只会更新该行的测试。我尝试过以下查询,但它不起作用:
INSERT INTO tableName (user_id, item_id, test)
VALUES($1, $2, $3)
ON CONFLICT ON CONSTRAINT UNIQUE(user_id, item_id)
DO UPDATE SET test = ($3)
这不管用。我也试过使用不同的关键字,但没能让它正常工作。任何帮助都非常感谢
下面是我在postgres中的查询
select dns_time,update_time from dns_lookup where update_time=current_date;
这里的update_time是带有时区的timestamp类型。我也试过这个。
select dns_time,update_time from dns_lookup where update_time like current_date;
然后也得不到任何结果。我有current_date values.But的记录,它没有显示任何records.How,无法使用current_date.please将时
有没有可能在Postgres9.5中创建一个通用的(非特定于表的)触发器,该触发器在instead of update上执行,将update转换为insert?
基本上我想做的是(伪代码):
sql instead of UPDATE on TG_TABLE_NAME INSERT on TG_TABLE_NAME
我知道我可以创建一个非常特定于表的触发器,将每个值映射到一个insert语句中。我想要做的是避免在每个表上都创建这个触发器。
在这里,我在公共模式中有一个引用私有模式中的表的视图:
CREATE OR REPLACE VIEW public.products AS
SELECT products.id, products.product_id, products.title, products.company_id
FROM private.products;
ALTER TABLE products
OWNER TO postgres;
GRANT ALL ON TABLE public.products TO postgres;
GRANT SELECT, UPDATE, INSERT, DELE
如果我在postgres中有一个序列'foo‘,并执行如下操作: begin;
insert into ... values (nextval('foo'));
commit; 是否在提交时评估nextval?换句话说,如果我只对该列进行这样的写入,它是否会以单调递增的方式显示出来,或者那里是否存在竞争? 文档非常清楚地表明,序列是非事务性的,但没有说明它们是否可以用于以这种方式对写入进行排序。 如果是,这是怎么回事? begin;
select nextval('foo'); -- save the value
insert into ... val
例如,我有一个有两个列的表,其值具有完美的线性相关性。
CREATE TABLE measurements (
sensor int PRIMARY KEY,
num serial PRIMARY KEY,
time timestamptz DEFAULT now(),
value float
);
-- many times:
INSERT INTO measurements(sensor, value) VALUES ($1, $2);
time和num都是单调增长的,具有较高num值的行也有更大的time值。
Postgres将在主键列上创建btree索引。我可以告诉它在
我需要Postgres中的UPSERT功能。由于Postgres本机不支持此功能,所以我编写了一个函数(尝试更新,如果没有更新行,则插入)
这是函数的模板:
CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS
$$
BEGIN
LOOP
-- first try to update the key
UPDATE db SET b = data WHERE a = key;
IF found THEN
RETURN;
END IF;
我在MySQL中有以下DB模式,我已经使用对象关系映射在PostgreSQL中复制了它:
CREATE TABLE IF NOT EXISTS users (
id BIGINT NOT NULL DEFAULT NEXTVAL ('users_seq'),
email VARCHAR(255) NOT NULL DEFAULT '',
password VARCHAR(255) NOT NULL DEFAULT '',
last_name VARCHAR(255)
让我们假设一个实体Person和Company的场景,以及一个表PersonCompanyStocks来建模一个人拥有某个公司的股票数量(N:M基数)。例如:
person | company | num_stocks
-----------------------------
Alice | foo | 300
Bob | foo | 100
Bob | bar | 200
这个表使用(person, company)作为主键来保证唯一的条目,以及相应的person/company表的外键(为了简单起见,我只使用字符串ID)。
现在让我们假设bar公司收