AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 168822
Accepted
Dr.YSG
Dr.YSG
Asked: 2017-04-01 13:45:32 +0800 CST2017-04-01 13:45:32 +0800 CST 2017-04-01 13:45:32 +0800 CST

PostgreSQL/PostGIS 9.6 quebrou meu índice composto

  • 772

No PostgreSQL 9.2 eu não tive nenhum problema em criar um índice que tivesse um tipo de geografia (postGIS) e um inteiro como um índice composto. Mas agora (9.6) ele reclama da criação do índice e não entendo a dica que está fornecendo:

As colunas e dados são todos criados corretamente, o Postgres está reclamando no índice de criação.

ERROR: data type integer has no default operator class for access method "gist" 
HINT: You must specify an operator class for the index 
      or define a default operator class for the data type. 
********** Error**********  
ERROR: data type integer has no default operator class for access method "gist" 
SQL state: 42704 
Hint: You must specify an operator class for the index 
      or define a default operator class for the data type.

A definição do esquema é a seguinte:

- Table: portal.inventory

-- DROP TABLE portal.inventory;

CREATE TABLE portal.inventory
(
  type character varying,
  pid integer,
  size bigint,
  date timestamp without time zone,
  path character varying,
  outline geography(Polygon,4326)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE portal.inventory
  OWNER TO postgres;

-- Index: portal.inventory_compound_idx

-- DROP INDEX portal.inventory_compound_idx;

CREATE INDEX inventory_compound_idx
  ON portal.inventory
  USING gist
  (outline, pid);

-- Index: portal.inventory_icompound_idx

-- DROP INDEX portal.inventory_icompound_idx;

CREATE INDEX inventory_icompound_idx
  ON portal.inventory
  USING gist
  (pid, outline);
postgresql postgis
  • 1 1 respostas
  • 1118 Views

1 respostas

  • Voted
  1. Best Answer
    joanolo
    2017-04-02T03:11:05+08:002017-04-02T03:11:05+08:00

    Você precisa instalar um específico EXTENSIONem seu banco de dados:

    CREATE EXTENSION btree_gist ;
    

    De acordo com a documentação do PostgreSQL em btree_gist :

    btree_gist fornece classes de operadores de índice GiST que implementam comportamento equivalente de árvore B para os tipos de dados int2, int4, int8, float4, float8, numeric, timestamp com fuso horário, timestamp sem fuso horário, time with time zone, time without time zone, date , interval, oid, money, char, varchar, text, bytea, bit, varbit, macaddr, inet e cidr.

    Em geral, essas classes de operadores não superarão os métodos de índice de árvore B padrão equivalentes e não possuem um recurso importante do código de árvore B padrão: a capacidade de impor exclusividade. No entanto, eles fornecem alguns outros recursos que não estão disponíveis com um índice de árvore B, conforme descrito abaixo. Além disso, essas classes de operadores são úteis quando é necessário um índice GiST de várias colunas, em que algumas das colunas são de tipos de dados que são indexáveis ​​apenas com GiST, mas outras colunas são apenas tipos de dados simples. Por fim, essas classes de operadores são úteis para testes GiST e como base para o desenvolvimento de outras classes de operadores GiST.

    (ênfase minha)

    btree_gistfaz parte da instalação padrão (atual) do PostgreSQL, portanto, você não precisa instalar nenhum arquivo em seu sistema.

    Depois de instalar esta extensão, você pode executar todas estas instruções em uma instalação limpa do PostgreSQL 9.6.2, sem falhas:

    -- If there is not there, create extension PostGis as well
    CREATE EXTENSION IF NOT EXISTS postgis ;
    
    -- Create Schema `portal`
    CREATE SCHEMA IF NOT EXISTS portal ;
    

    E execute todas as suas CREATEinstruções sem falhas.

    CREATE TABLE portal.inventory
    (
      type character varying,
      pid integer,
      size bigint,
      date timestamp without time zone,
      path character varying,
      outline geography(Polygon,4326)
    );
    
    CREATE INDEX inventory_compound_idx
      ON portal.inventory
      USING gist
      (outline, pid);
    
    CREATE INDEX inventory_icompound_idx
      ON portal.inventory
      USING gist
      (pid, outline);
    

    NOTA: Isso também foi necessário para a versão 9.2, de acordo com o comentário de @Erwin Brandstetter. Então, provavelmente, se você fizer um dump do banco de dados da versão 9.2, a CREATE EXTENSION btree_gist ;instrução deve aparecer.

    • 10

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve