小编Ale*_*ans的帖子

大事务和并发的性能?

如果我有一个数百万行的表,并且运行一个更新 50k 行的事务,那么这会对性能产生什么影响?

假设它的索引正确,应该不会花很长时间,但是哪些行被锁定以及该表的使用如何受到影响?

  1. 在事务开始后和完成之前是否可以读取事务期间更新的行?
  2. 在事务开始后和完成之前是否可以读取事务期间未更新的行?
  3. 如果另一个事务开始尝试更改先前未完成的事务正在更改的行,那么该事务会在开始时失败还是在尝试提交之后失败(假设发生冲突)?

我的问题是针对 Postgres 9.3 的;我认为存在差异。

postgresql concurrency postgresql-9.3

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

定期查询 pg_type 以获取枚举是一种不好的做法吗?

在 Postgres 中,我正在考虑查询pg_type我经常使用的最新枚举列表。我会使用这样的东西:

SELECT pg_type.typname AS enum_type, pg_enum.enumlabel AS enmu_label FROM 
pg_type JOIN pg_enum ON pg_enum.enumtypid = pg_type.oid;
Run Code Online (Sandbox Code Playgroud)

或者

SELECT distinct pg_type.typname AS enum_type FROM pg_type JOIN pg_enum ON 
pg_enum.enumtypid = pg_type.oid;
Run Code Online (Sandbox Code Playgroud)

这是不好的做法吗?

postgresql catalogs enum

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

如何在过程(不是函数)中使用变量?

据我了解,在 Postgres 中,过程用于操作数据,函数用于读取数据。我想要:

  1. 声明一个变量
  2. 选择一个值到一个变量中
  3. 将变量插入另一个表
  4. 在事务中执行此操作
  5. 在存储过程中执行此操作
  6. 必要时回滚

CREATE PROCEDURE test_variable()
LANGUAGE SQL
AS $$
    BEGIN;
        DECLARE some_id INTEGER;
        SELECT nextval('some_sequence') INTO some_id;
        INSERT INTO some_table (some_column) VALUES (some_id);
    END;
$$;
Run Code Online (Sandbox Code Playgroud)

以上对我不起作用。当我寻找解决方案时,有很多不同的变量涉及函数$$、声明、事物不返回任何内容;似乎找不到一个简单的例子;我只需要一个清晰的语法示例。

postgresql transaction plpgsql functions sql-procedure

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

如何选择多个值到数组中并循环?(postgres 9.3)

为了便于论证,我有一个简单的表格。我有一个选择 ids 并循环它们的函数,称为loop_test. 我可以选择一个 id 数组并循环它们,从而导致我在事务中进行更改。

CREATE OR REPLACE FUNCTION loop_test() RETURNS void AS $$
DECLARE
        _ids_array INTEGER[];
        _id INTEGER;
BEGIN
        SELECT ARRAY(SELECT id FROM loop_test) INTO _ids_array; 
        FOREACH _id IN ARRAY _ids_array
        LOOP
                UPDATE loop_test SET looped = TRUE WHERE id = _id;
        END LOOP;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

桌子:

db=# \d loop_test;
      Table "public.loop_test"
    Column     |  Type   | Modifiers 
---------------+---------+-----------
 id            | integer | 
 other_id      | integer | 
 id_copy       | integer | 
 other_id_copy | integer | …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate array

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