标签: postgresql

如何在 PostgreSQL 中从本地文件复制到远程数据库?

我是 psql 的新手,需要一些帮助。如何将本地 CSV 加载到远程数据库?

我正在使用以下命令

\COPY test(user_id, product_id, value) 
      FROM '/Users/testuser/test.tsv' WITH DELIMITER '\t' CSV HEADER;
Run Code Online (Sandbox Code Playgroud)

但这会在远程数据库上搜索文件,而我需要在本地 PC 上执行此操作。

postgresql postgresql-9.1

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

PostgreSQL 和默认模式

每当我在 PostgreSQL Maestro 中创建一个全新的数据库时,它都会创建以下默认模式列表:

在此处输入图片说明

现在根据我的理解,模式就像组织文件夹等。所以我的问题是当我创建新数据库时是否需要所有这些模式?如果是这样,它们在 PG 方面用于什么,因为我自己永远不会使用它们。

我可以理解,information_schema因为这是在服务器上安装 MySQL 的默认设置,尽管我不明白为什么数据库需要它自己而不是整个服务器,但我猜每个数据库类型都有他自己的。

schema postgresql

9
推荐指数
2
解决办法
9678
查看次数

为什么`pg_lsclusters` 没有列出我的 Postgres 集群?

  1. apt-get安装了 Postgres 9.2.4(使用 PPA)。
  2. 我曾经pg_dropcluster --stop 9.2 main删除默认的数据库集群,因为我打算在刚刚挂载的单独 SSD 卷(一个 Rackspace 块存储卷)上创建一个新集群。
  3. 我创建了新集群,其数据驻留在我的 SSD 卷上并启动它(ps显示为该新集群运行的所有正常 Postgres 进程,我能够打开 Postgres shell 并运行 SQL - 即它运行良好)。现在,当我运行时pg_lsclusters,没有列出任何内容。

main在我删除它之前,集群列出得很好。为什么我的新集群不显示,即使它正在运行?我什至重新启动了服务器(以防万一)。

postgresql postgresql-9.2

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

PostgreSQL - 处理数千个元素的数组

我希望根据列是否包含在作为整数数组传递的大值列表中来选择行。

这是我目前使用的查询:

SELECT item_id, other_stuff, ...
FROM (
    SELECT
        -- Partitioned row number as we only want N rows per id
        ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY start_date) AS r,
        item_id, other_stuff, ...
    FROM mytable
    WHERE
        item_id = ANY ($1) -- Integer array
        AND end_date > $2
    ORDER BY item_id ASC, start_date ASC, allowed ASC
) x
WHERE x.r <= 12
Run Code Online (Sandbox Code Playgroud)

该表的结构如下:

    Column     |            Type             | Collation | Nullable | Default 
---------------+-----------------------------+-----------+----------+---------
 item_id       | integer                     |           | not null …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-performance

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

声明函数波动性 IMMUTABLE 会损害性能吗?

Postgres 函数声明为波动性分类VOLATILESTABLEIMMUTABLE。众所周知,该项目对内置函数的这些标签非常严格。并且有充分的理由。突出的例子:表达式索引只允许IMMUTABLE函数并且那些必须是真正不可变的以避免错误的结果。

用户定义的函数仍然可以按照所有者的选择自由声明。手册建议:

为了获得最佳优化结果,您应该使用对它们有效的最严格的波动率类别来标记您的函数。

...并添加了大量可能因波动率标签不正确而出错的事情列表。

尽管如此,在某些情况下,伪造不变性是有道理的。大多数情况下,当您知道该函数实际上在您的范围内是不可变的。例子:

除了对数据完整性的所有可能影响之外,对性能的影响是什么?人们可能认为声明一个函数IMMUTABLE只会对性能有益。是这样吗?

声明函数波动性会IMMUTABLE 损害性能吗?

让我们假设当前的 Postgres 10 来缩小范围,但所有最近的版本都很有趣。

postgresql performance functions

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

How to limit rows in PostgreSQL update statement

My table employees contain more than ten million data. i want to update 10k rows in commission_pct column where commission_pct is null and set zero(0) value.

in oracle I can easily solve this by using rownum.

update employees
set commission_pct=0
where commission_pct is null and rownum<=10000;
Run Code Online (Sandbox Code Playgroud)

but postgresql does not support rownum.

how to solve this in postgresql?

postgresql update

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

为什么*不*错误:索引“foo”的索引行大小 xxxx 超过最大值 2712?

我们一再看到尝试索引值超过最大大小的列失败。Postgres 10 有这样的错误信息:

ERROR:  index row size xxxx exceeds maximum 2712 for index "foo_idx"
HINT:  Values larger than 1/3 of a buffer page cannot be indexed.
       Consider a function index of an MD5 hash of the value, or use full text indexing.
Run Code Online (Sandbox Code Playgroud)

例子:

等等。

现在,a_horse_with_no_name 演示了一个具有更大text值(10000 个字符)的案例,它似乎仍然适用UNIQUE于 Postgres 9.6 中的索引。引用他的测试用例:

create table tbl (col text);
create unique index on tbl (col);

insert into tbl
values (rpad(md5(random()::text), 10000, md5(random()::text)));

select length(val) …
Run Code Online (Sandbox Code Playgroud)

postgresql index size limits

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

Postgresql 10 没有与 ON CONFLICT 规范匹配的唯一或排除约束

我目前有一个看起来像这样的表:

CREATE TABLE "PDPC".collection
(
    col_no bigint NOT NULL DEFAULT nextval('"PDPC".collection_col_no_seq'::regclass),
    q1 character varying(10000) COLLATE pg_catalog."default",
    q2 character varying(10000) COLLATE pg_catalog."default",
    q3 character varying(10000) COLLATE pg_catalog."default",
    q4 character varying(10000) COLLATE pg_catalog."default",
    dg_fkey bigint,
    CONSTRAINT collection_pkey PRIMARY KEY (col_no),
    CONSTRAINT collection_dg_fkey_fkey FOREIGN KEY (dg_fkey)
        REFERENCES "PDPC".datagroup (dg_no) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE "PDPC".collection
    OWNER to postgres;
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 postgresql 在 PHP 中执行 UPSERT 语句,但我收到了

致命错误:未捕获的 PDOException:SQLSTATE[42P10]:无效的列引用:7 …

postgresql foreign-key insert update

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

SELECT 会像 V​​ACUUM 一样删除死行吗?

我在摆弄VACUUM并注意到一些意想不到的行为,其中SELECT从表中ing 行似乎减少了VACUUM之后必须做的工作。

测试数据

注意:autovacuum 被禁用

CREATE TABLE numbers (num bigint);
ALTER TABLE numbers SET (
  autovacuum_enabled = 'f',
  toast.autovacuum_enabled = 'f'
);

INSERT INTO numbers SELECT generate_series(1, 5000);
Run Code Online (Sandbox Code Playgroud)

试验 1

现在我们对所有行运行更新,

UPDATE numbers SET num = 0;
Run Code Online (Sandbox Code Playgroud)

当我们跑步时,VACUUM (VERBOSE) numbers;我们得到,

INFO:  vacuuming "public.numbers"
INFO:  "numbers": removed 5000 row versions in 23 pages
INFO:  "numbers": found 5000 removable, 5000 nonremovable row versions in 45 out of 45 pages
DETAIL:  0 dead row versions …
Run Code Online (Sandbox Code Playgroud)

postgresql select vacuum postgresql-11

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

如何在 Ubuntu 18.04 上安装 postgresql-client-11

我需要在 Ubuntu 18.04 系统上使用pg_basebackup/pg_dump程序连接到远程 PostgreSQL 11.6 服务器。

但是目前系统只包含pg_basebackup10.10,远程数据库使用的是PostgreSQL 11.6。运行pg_basebackup给出错误

pg_basebackup:不兼容的服务器版本 11.6

尝试pg_basebackup使用以下命令安装正确版本:

apt install postgresql-client-11
Run Code Online (Sandbox Code Playgroud)

但是找不到apt包。只有postgresql-clientpostgresql-client-10postgresql-client-common可用于系统的 apt 存储库。

问题:如何在pg_basebackup不从远程数据库服务器复制过来的情况下安装正确的版本,并且在这台机器上不安装PostgreSQL 11.6?

postgresql backup ubuntu pg-dump

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