标签: postgresql

仅用“\d”描述 postgres 表(不是序列、索引、视图等)

我想描述 postgres 数据库中的每个表。

目前我有这个:

psql -d db -c "\d *" > db_description.txt
Run Code Online (Sandbox Code Playgroud)

但这也包括所有序列、视图等。

是否有*模式只匹配表的命令?
或者有另一种方法可以做到这一点?

postgresql

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

在 Postgres UPSERT 中有条件地设置值

我们有一个UPSERT功能通过on conflict do set. 如何在 set 语句中有条件地设置值,例如

if(excluded.col1 is null) col1=table.col1 else col1=excluded.col1
Run Code Online (Sandbox Code Playgroud)

我们使用的是 Postgres 9.5。

postgresql upsert postgresql-9.5

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

将 SQL SERVER 过程转换为 POSTGRESQL

我在 SQL Server 中有程序可以打印给定国家/地区的所有玩家。我尝试将其转换为 plpgsql,但出现错误。

SQL Server 过程

CREATE PROCEDURE kraj_pilkarze @kraj varchar(30)
AS
DECLARE @idkraj INT
DECLARE @nazwa_zespolu varchar(30)
SELECT @idkraj = id_kraj FROM kraj WHERE @kraj=nazwa
DECLARE kursor_pilk CURSOR
FOR SELECT imie,nazwisko, id_zespol, id_kraj FROM pilkarz
DECLARE @imie varchar(20), @nazwisko varchar(30), @zespol int, @d_kraj int
OPEN kursor_pilk
FETCH NEXT FROM kursor_pilk INTO @imie, @nazwisko,@zespol, @d_kraj
WHILE @@FETCH_STATUS=0
    BEGIN
    IF @d_kraj=@idkraj
        BEGIN
            SELECT @nazwa_zespolu = nazwa FROM zespol WHERE @zespol=id_zespol 
            PRINT @imie+' '+@nazwisko+', '+@nazwa_zespolu
            FETCH NEXT FROM kursor_pilk INTO …
Run Code Online (Sandbox Code Playgroud)

postgresql sql-server cursors plpgsql functions

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

对日期范围设置唯一性约束

我有一个表reservation的列roomno(INTEGER)startdate(DATE)enddate(DATE)与主键(roomno, startdate)。

我如何在表上设置约束,以便不允许预订重叠?

我试图在SQLFIDDLE postgreSQL9.3 中实现这个

例如:

101  2016-01-01   2016-01-05
101  2016-01-03   2016-01-06 [This row should not be possible to insert]
Run Code Online (Sandbox Code Playgroud)

startdate并且enddate是数据类型date

postgresql database-design exclusion-constraint postgresql-9.3 range-types

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

postgresql 中的数据库丢失行,如何用备份副本填充丢失的行?

我有一个大问题,我对 postgresql 不太好,因为我使用 Django 进行查询,而且我只有 sql 查询的基础知识。

我的问题是有一个问题,超级用户删除了一个与我的表“客户”相关的字段(我不知道她是怎么做的,我没有设计系统,我只是管理它),所以有 120 个客户端从表中消失了,我从昨天开始备份(我知道备份有多重要),我想将所有数据从我的备份“复制”到缺少行的数据库中。

我试图只从 pgadmin 恢复表(简单的方法),但它说“重复键值违反了唯一约束“user_client_pkey”,详细信息:Key(id) = 461 已经存在。所以我猜我无法恢复,因为有与确切 id 匹配的值,是否有任何简单的方法(或程序)可以复制丢失的行,只提供 id 并填充我备份中的数据?

类似于比较行,如果没有具有该 id 的行,则在那里插入数据?我知道这不是一个简单的查询,但任何帮助都会很棒。我确定最简单的方法是回滚、删除数据库和恢复,但是有这么多表有更多信息,客户端是唯一真正需要恢复的。

我尝试创建一个新表并从备份中恢复数据但它没有填充(可能是因为它的名称与新表不匹配),我还更改了缺少行的表的名称,然后创建一个新表并从备份中恢复,但 pk 丢失了,我收到此错误:

我更改了表cliente的原始表,然后创建了一个新表并将其命名为原始表,恢复数据库,它填满了,但给了我这个错误:

由于表 public."admin_clienteB" 没有主键或 OID,您只能查看数据。没有主键的“编辑数据”工具无法插入新行和更改现有行。

任何帮助都会很棒。

postgresql pgadmin postgresql-9.4 django

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

使用其他列中的静态数据在 Postgres 中导入 CSV

如何COPY在 Postgres 中创建 CSV 文件以及不在 CSV 中的列的静态数据?在 MySQL 中,我可以LOAD DATA INFILE ...对列名以及文件中不存在的列的任何值进行分析。我想用 Postgres 做类似的事情,但COPY命令不支持。

postgresql bulk-insert

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

使用 RETURNING 子句直接从 INSERT 返回值

我有一个以以下结尾的函数:

    INSERT INTO configuration_dates (
      cols...
    ) VALUES (
      values...
    ) RETURNING id INTO ret_id;
    RETURN ret_id;
Run Code Online (Sandbox Code Playgroud)

我想删除该INTO ret_id部分,而是执行以下操作:

RETURN (INSERT INTO configuration_dates (
  weekly_date_configuration_id,
  "from",
  "to",
  price,
  activity_configuration_id
) VALUES (
  wdc_id,
  from_ts,
  from_ts + wdc.duration,
  wdc.price,
  wdc.activity_configuration_id
) RETURNING id);
Run Code Online (Sandbox Code Playgroud)

但我还没有找到如何实现这一点。

编辑:添加整个功能

CREATE FUNCTION make_date_from_configuration(wdc_id UUID, from_date DATE)
  RETURNS INTEGER AS $$
DECLARE
  from_dow INT := EXTRACT(isodow FROM from_date); -- day of the week (1 - 7)
  wdc weekly_date_configurations;
  from_ts TIMESTAMP;
  ret_id INTEGER;
BEGIN
  SELECT * …
Run Code Online (Sandbox Code Playgroud)

postgresql parameter plpgsql functions

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

我可以将 HSTORE 列更改为 JSON 数据类型吗?

有没有办法将现有的HSTORE数据类型列(具有数据)修改JSON为 Postgres 数据库中的数据类型?

postgresql hstore json

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

SELECT查询的FROM子句中表名后的随机字符

我对 SQL 和数据库管理比较陌生。我正在维护/修改一个与 Postgresql 交互的 PHP 应用程序,并且遇到了以下语句:

SELECT * FROM client_messages c;
Run Code Online (Sandbox Code Playgroud)

我不明白最后一个“c”字符的含义。事实上,似乎可以在 SELECT 的 FROM 子句中的表名后添加随机字符,而不会影响查询结果。尝试使用“psql”实用程序,我发现这三个查询都产生相同的结果,没有任何错误:

SELECT * FROM cltk2980dat c LIMIT 5;
SELECT * FROM cltk2980dat LIMIT 5;
SELECT * FROM cltk2980dat kdopwijfdwlhoeufhnekfhyufhf LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

然而,我正在维护的程序的作者似乎真的想要 SELECT 查询中的最后一个 'c' 字符。我在 SQL 语法手册中找不到对此的任何解释,尽管我可以找到对修改 SELECT 的 FROM 子句的许多其他方法的解释。

最后一个角色有什么意义吗?在某些情况下,FROM 表名之后的明显随机字符是否有任何意义?

postgresql

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

MySql 与 Postgresql 视图创建

我在 MySql 中有这个视图查询,它可以工作

SELECT s.id AS id,
       s.customer_id AS customer_id,
       s.shipment_status_id AS shipment_status_id,
       ss.name AS shipment_status_name,
       s.ship_from_date AS ship_from_date,
       s.ship_to_company AS ship_to_company,
       s.ship_from_company AS ship_from_company,
       s.ship_to_address1 AS ship_to_address1,
       s.ship_to_address2 AS ship_to_address2,
       s.ship_to_postal_code AS ship_to_postal_code,
       s.ship_to_city AS ship_to_city,
       c.country AS country,
       p.tracking_numbers AS tracking_numbers,
       s.quote_service_name AS quote_service_name,
       s.quote_total_charge AS quote_total_charge,
       p.weight AS weight,
       p.insurance_amount AS insurance_amount,
       p.cod_amount AS cod_amount,
       z.fedex AS ZONE,
       s_p.code AS state_province_code,
       s_p.zone AS state_province_zone,
       ss.name AS status_name,
       i.total AS total,
       cust.first_name AS customer_first_name,
       cust.last_name AS customer_last_name,
       (CASE …
Run Code Online (Sandbox Code Playgroud)

postgresql group-by

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