小编S-M*_*Man的帖子

处理PostgreSQL中设计糟糕的"变量列"表

我正在处理一个设计糟糕的桌子,有点像这样

create table (
   entity_key  integer,
   tag1        varchar(10),
   tag2        varchar(10),
   tag3        varchar(10),
   ...
   tag25       varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

实体可以具有由非空列的数量指示的0个或更多个标签.标签都是相同的类型,应该有一个单独的"标签"表,我们可以加入主要实体.

但是,我坚持使用这个(非常大的)表.

我想运行一个查询,它给出了不同的标签和每个标签的计数.

如果我们有标准的"标签"表,我们可以简单地写

select tag, count(tag) from tags group by tag;
Run Code Online (Sandbox Code Playgroud)

但是,鉴于当前的表结构,我还没有为这个查询提出一个好的方法.

sql postgresql

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

在 PostgreSQL 中展平嵌套的 JSON 结构

我正在尝试编写一个 Postgres 查询,它将json以特定格式输出我的数据。

JSON 数据结构

{
    user_id: 123,
    data: {
        skills: {
            "skill_1": {
                "title": "skill_1",
                "rating": 4,
                "description": 'description text'
            },
            "skill_2": {
                "title": "skill_2",
                "rating": 2,
                "description": 'description text'
            },
            "skill_3": {
                "title": "skill_3",
                "rating": 5,
                "description": 'description text'
            },
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我最终需要格式化数据的方式:

[
    {
        user_id: 123,
        skill_1: 4, 
        skill_2: 2, 
        skill_3: 5, 
                    ... 
    },
    {
        user_id: 456,
        skill_1: 1, 
        skill_2: 3, 
        skill_3: 4, 
                    ... 
    }
]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我正在使用如下所示的查询:

SELECT
    user_id,
    data#>>'{skills, "skill_1",  rating}' AS …
Run Code Online (Sandbox Code Playgroud)

postgresql json nested object

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

有没有办法检查SAP系统中是否存在RFC

我正在开发一个ABAP PROGRAM,它从不同的SAP系统调用RFC.在调用RFC之前,有没有办法检查目标系统中是否存在RFC?

sap abap

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

“select from table1, table2”意味着什么操作?

我知道不同的连接,但我想知道当我们运行这样的查询时使用了哪些连接:

select * from table1 t1, table2 t2
Run Code Online (Sandbox Code Playgroud)

例如,它是完全外连接还是自然连接?

另外,它在不同的数据库中是否具有独特的含义,或者都具有相同的含义?


更新:如果我们添加where子句怎么办?会一直这样吗inner join

sql postgresql

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

SQL错误:表多次指定

我正在尝试在PostgreSQL中执行以下sql指令,当我这样做时会发生以下错误:

表名"fat_unidades"指定不止一次".

任何帮助?

SELECT  amb_recepcao.sequencial, amb_recepcao.cod_und_atend, atend.nome_fantasia as uni_atendimento
, amb_recepcao.cod_profissional, profissional.nom_pessoa as nom_profissional
, amb_recepcao.cod_atividade, fat_atividades.nom_atividade, amb_recepcao.tipo_pessoa
, amb_recepcao.cod_undpaciente, uni_pacie.nome_fantasia as nom_unidpaciente
, amb_recepcao.cod_paciente, pacie.nom_pessoa as paciente, amb_recepcao.cod_pessoa
, pessoas.nom_pessoa, amb_recepcao.cod_sintoma, amb_sintomas.nom_sintoma
, amb_recepcao.data_atendimento, amb_recepcao.hora_atendimento, amb_recepcao.motivos
, amb_recepcao.acoes_realizadas, amb_recepcao.senha_atendimento
FROM amb_recepcao
LEFT JOIN fat_unidades             ON ( fat_unidades.cod_unidade = amb_recepcao.cod_und_atend )
LEFT JOIN entidades atend          ON ( atend.cod_entidade = fat_unidades.cod_entidade )
LEFT JOIN fat_atividades           ON ( fat_atividades.cod_atividade = amb_recepcao.cod_atividade )
LEFT JOIN entidades uni_pacie      ON ( uni_pacie.cod_entidade = fat_unidades.cod_entidade ) …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql

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

如何使PostgreSQL函数成为原子?

假设我有一些PostgreSQL函数,如下所示:

CREATE FUNCTION insertSth() RETURNS void AS $$
BEGIN
    INSERT INTO ...;
END;

CREATE FUNCTION removeSthAfterSelect() RETURNS TABLE(...) AS $$
BEGIN
     SELECT id INTO some_id ...;
     RETURN QUERY SELECT * FROM ...;
     DELETE FROM ... WHERE id = some_id;
END;

CREATE FUNCTION justDeleteSth() RETURNS void AS $$
BEGIN
     DELETE FROM ...;
END;

CREATE FUNCTION justSelectSth() RETURNS TABLE(...) AS $$
BEGIN
     RETURN SELECT * FROM ...;
END;
Run Code Online (Sandbox Code Playgroud)

从我对PostgresSQL函数的理解insertSth,justDeleteSth并将justSelectSth以原子方式执行(?).所以并行执行它们不会搞砸任何东西.

但是,removeSthAfterSelect如果有并行执行,它可能会SELECT id INTO some_id …

sql postgresql stored-procedures plpgsql psql

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

如何在postgres中切换数据库?

在SQL Server中,我使用:

 use database_name
 Go
 Select * from table_name
Run Code Online (Sandbox Code Playgroud)

在postgreSQL中,我仍然使用:

 \connect database_name
 Select * from table_name
========================
then error: 
ERROR:  syntax error at or near "\"
LINE 1: \connect database_name
        ^
********** Error **********

ERROR: syntax error at or near "\"
SQL state: 42601
Character: 1.
Run Code Online (Sandbox Code Playgroud)

为什么?能帮到我吗?谢谢.

postgresql

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

在Postgres中的时区之间转换

我试图了解Postgre中的时间戳和时区。我想我明白了,直到我写这篇文章为止。
专注于“在时区之间转换”部分。它有两个例子。

(将默认时区配置考虑为UTC。)

例子1

db=# SELECT timezone('US/Pacific', '2016-01-01 00:00'); outputs 2015-12-31 16:00:00
Run Code Online (Sandbox Code Playgroud)

根据本文和我的理解,由于该函数的'2016-01-01 00:00'一部分timezone只是一个字符串,因此将其静默转换为默认的UTC。因此,'2016-01-01 00:00' UTC然后将其转换US/Pacifictimezone函数所要求的,即2015-12-31 16:00:00

例子2

db=# SELECT timezone('US/Pacific', '2016-01-01 00:00'::timestamp); outputs 2016-01-01 08:00:00+00
Run Code Online (Sandbox Code Playgroud)

不好意思,我不明白为什么,那里的解释也无济于事。好的,函数的'2016-01-01 00:00'::timestamp一部分timezone不再是字符串,而是实际的时间戳。在什么时区?如果是UTC,则输出必须与示例1相同。因此,它将自动转换为US/Pacific?。那么输出是UTC吗?但为什么?我要求的 不是US/Pacifictimezone的UTC。

请说明timezone何时获取时间戳并被要求转换时间戳时的行为。谢谢。

postgresql timezone timestamp timezone-offset timestamp-with-timezone

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

如何在 PostgreSQL 中删除表而不删除子表

我有一张名为 Parent 的父表。用作其他 3 个表 child1,child2,child3 的外键的父表的 id

我想删除该表并再次创建父表。我不想丢失子表中的数据。

sql postgresql postgresql-9.5

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

Flutter:下拉菜单的宽度与按钮大小无关

我有DropDownButton一排两个 s。

  DropdownButtonHideUnderline(
    child: DropdownButton(
      isExpanded: true,
      value: item,
      items: widget.items.map((item) {
        return DropdownMenuItem(
          value: item, 
          child: Text(
            item.toString(),
          );
      }).toList(),
      onChanged: widget.onChanged,
      selectedItemBuilder: (context) {
        return widget.items.map((item) {
          return Align(
            child: Text(
              item.toString(),
            ),
            alignment: Alignment.centerLeft,
          );
        }).toList();
      }
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有没有办法拉伸菜单的宽度而不是保持按钮的大小?

编辑:

示例:Dart pad(感谢@Diwyansh;下拉菜单仅使用 UI 宽度的一半,而不是整个)

drop-down-menu flutter

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