相关疑难解决方法(0)

Postgresql如何在conflic上用CSV复制到STDIN并进行更新?

我想要做

 " on conflict (time) do update set name , description "
Run Code Online (Sandbox Code Playgroud)

但是我不知道何时将stdin与csv一起使用,我不知道什么名字等于什么?和描述等于...

table_a:

在此处输入图片说明

xxx.csv:

在此处输入图片说明

with open('xxx/xxx.csv', 'r', encoding='utf8') as f:
    sql = """
    COPY table_a FROM STDIN With CSV on conflict (time) 
    do update set name=??, description=??;
    """
    cur.copy_expert(sql, f)
    conn.commit()
Run Code Online (Sandbox Code Playgroud)

python csv postgresql stdin psycopg2

4
推荐指数
3
解决办法
2858
查看次数

带有两个参数的 PostgreSQL 中的间隔(天)

在这个查询中:

Select * from table where future_date - CURRENT_DATE <= '10';

它返回 10 天或更短的间隔。

如何添加两个参数?例子:

Select * from table where future_date - CURRENT_DATE <= '10' AND >= '30';
Run Code Online (Sandbox Code Playgroud)

我已经尝试过:

Select * from table where future_date - CURRENT_DATE BETWEEN '10' AND '30'
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

sql postgresql date-range

3
推荐指数
1
解决办法
1万
查看次数

Postgresql upsert 返回 id 冲突?

我现在有以下查询,它在成功插入后返回 id

INSERT INTO match (match_id) values(?) ON CONFLICT DO NOTHING RETURNING id
Run Code Online (Sandbox Code Playgroud)

我怎样才能返回id冲突时已经存在的行?

postgresql

3
推荐指数
1
解决办法
9817
查看次数

plpgsql - 在declare语句中使用动态表名

我正在尝试编写plpgsql以下形式的函数(注意这是一个简化版本):

CREATE FUNCTION check_valid(tablename regclass) RETURNS boolean AS $$

DECLARE valid_row tablename%ROWTYPE;

BEGIN

EXECUTE format('SELECT * FROM %s', tablename) into valid_row;

IF valid_row IS NULL THEN
      RETURN QUERY SELECT false;

ELSIF valid_row.is_valid = false;
      RETURN QUERY SELECT false;

ELSIF valid_row.hit_count > valid_row.hit_limit;
      RETURN QUERY SELECT false;

ELSE
      RETURN QUERY SELECT true;

END IF;

END

$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

失败的部分是DECLARE线.如何根据变量表名声明类型?或许我需要以某种方式施展它?

类似的DECLARE mytable%ROWTYPE;工作正常,但如果我使用变量名称,如tablename%ROWTYPE:

ERROR: relation "tablename" does not exist

sql postgresql plpgsql

2
推荐指数
1
解决办法
1749
查看次数

SELECT类型查询是唯一可以嵌套的类型吗?

是否可以将非选择查询(更新,插入,删除)嵌入到另一个查询中?

像(在选择内插入)

A single query:

select such,and,such from .... where .... insert into .... ;
Run Code Online (Sandbox Code Playgroud)

mysql sql postgresql nested-queries common-table-expression

1
推荐指数
1
解决办法
942
查看次数

Postgres upsert:区分新行和更新行

我正在考虑使用 PostgreSQLINSERT .. ON CONFLICT UPDATE功能。理想情况下,我将能够区分哪些行已成功插入,哪些行已更新。有没有办法做到这一点?

sql postgresql upsert

1
推荐指数
1
解决办法
478
查看次数

基于具有 NULL 值的 UNIQUE 约束的 UPSERT

我有一个 Postgres 表,对多个列有唯一约束,其中一列可以为 NULL。我只希望每个组合都允许该列中的一条记录为 NULL。

create table my_table (
   col1 int generated by default as identity primary key,
   col2 int not null,
   col3 real,
   col4 int,
   constraint ux_my_table_unique unique (col2, col3)
);
Run Code Online (Sandbox Code Playgroud)

我有一个 upsert 查询,当它遇到 col2、col3 中具有相同值的记录时,我想更新 col4:

insert into my_table (col2, col3, col4) values (p_col2, p_col3, p_col4)
on conflict (col2, col3) do update set col4=excluded.col4;
Run Code Online (Sandbox Code Playgroud)

但当 col3 为 NULL 时,冲突不会触发。我读过有关使用触发器的内容。请问,引发冲突的最佳解决方案是什么?

sql postgresql null unique upsert

1
推荐指数
2
解决办法
5625
查看次数

如何在 Postgres 中使用 upsert

我想将 Postgres 中的这段代码转换为更短的代码,以实现相同的效果。我读过有关 upsert 的内容,但我不明白在我的代码上实现它的好方法。我写的很好,但我想找到一种更优雅的方式来编写它。希望这里有人可以帮助我!这是查询:

CREATE OR REPLACE FUNCTION insert_table(
    in_guid    character varying,
    in_x_value character varying,
    in_y_value character varying
)
RETURNS TABLE(response boolean) LANGUAGE 'plpgsql'

DECLARE _id integer;

BEGIN
    -- guid exists and it's been 10 minutes from created_date:
    IF ((SELECT COUNT (*) FROM public.tbl_client_location WHERE guid = in_guid AND created_date < NOW() - INTERVAL '10 MINUTE') > 0) THEN
        RETURN QUERY (SELECT FALSE);
    
    -- guid exists but 10 minutes hasen't passed yet:
    ELSEIF ((SELECT COUNT (*) FROM public.tbl_client_location WHERE …
Run Code Online (Sandbox Code Playgroud)

sql postgresql upsert

0
推荐指数
1
解决办法
1152
查看次数