Vou migrar de um banco de dados. Há uma coluna do tipo image
que eu gostaria de exportar para arquivos binários no sistema de arquivos. Um arquivo para cada registro. Como posso fazer isso com o SQL Server?
Jonas's questions
Estou usando o Toad para escrever consultas em um banco de dados Oracle. Quando escrevo table_name.
, recebo um menu de sugestão automática com todos os nomes das colunas. Mas se eu escolher um nome de coluna, o nome da tabela e o nome da coluna serão escritos em letras maiúsculas . Existe alguma maneira de mudar isso para ser escrito em letras minúsculas ?
Em View > Formatting Option > Case
"Identificadores" estão definidos paraLowercase
Instalei o PostgreSQL na minha máquina Windows para desenvolvimento. Agora eu não o uso há um tempo e esqueci a senha do usuário postgres
(usuário admin padrão no PostgreSQL). Como posso redefinir a senha postgres
no PostgreSQL no Windows?
Segui a sugestão do Milen, mas recebi esta mensagem ao tentar recarregar o arquivo de configuração:
C:\Program Files\PostgreSQL\9.1\data>pg_ctl reload -D .
pg_ctl: could not send reload signal (PID: 3396): Operation not permitted
No Windows existe uma opção de menu "Recarregar Configuração" que funcionou melhor, conforme mostrado abaixo:
Estou tentando configurar um banco de dados PostgreSQL em uma máquina Ubuntu. Eu gostaria de poder acessá-lo usando pgAdmin3 de uma máquina remota. Como configuro isso?
Eu instalei o banco de dados PostgreSQL no Ubuntu usando:
sudo apt-get install postgresql
No meu /etc/postgresql/9.1/main/pg_hba.conf
tenho esta linha:
host all all all password
portanto, ele deve aceitar conexões de todos os endereços IPv4 e as senhas devem ser enviadas em texto não criptografado (isso é por motivos de desenvolvimento).
Se eu executar este comando para ver quais serviços estão sendo executados:
sudo netstat -tulpn
Eu posso ver estas linhas, que estão mostrando que o PostgreSQL está aceitando conexões na porta padrão:
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
3561/postgres
Quando tento me conectar a este servidor PostgreSQL de um computador remoto na mesma rede local, recebo esta mensagem de erro:
Servidor não escuta
O servidor não aceita conexões: a biblioteca de conexões relata
não foi possível conectar ao servidor: Conexão recusada O servidor está sendo executado no host "10.0.1.7" e aceita conexões TCP/IP na porta 5432?
Eu usei postgres
como nome de usuário e sem senha. Mas eu também tentei com postgres
como senha. No servidor local eu posso fazer login usando:
sudo -u postgres psql postgres
Como posso me conectar a um banco de dados PostgreSQL em execução no Ubuntu a partir de uma máquina remota usando o pgAdmin3?
tenho uma tabela:
CREATE TABLE mytable (id SERIAL, name VARCHAR(10) PRIMARY KEY)
Agora quero adicionar nomes a esta tabela, mas apenas se eles ainda não existirem na tabela e, em ambos os casos, retornar o id
. Como posso fazer isso com o PostgreSQL?
Eu vi alguns scripts para isso, mas não há uma única instrução SQL para fazer isso?
Por exemplo, posso INSERT e retornar id
com:
INSERT INTO mytable (name) VALUES ('Jonas') RETURNING id
funciona na primeira vez e retorna id
. Mas falha se Jonas
já existir na tabela, mas quero retornar id
mesmo que o Insert falhe. Isso é possível fazer com o PostgreSQL?
Preciso converter um valor de Double Precision para Bigint com PostgreSQL. Como eu posso fazer isso?
Eu tentei com, to_bigint(myvalue)
mas essa função não existia.
tenho uma tabela:
CREATE TABLE names (id serial, name varchar(20))
Eu quero o "último id inserido" dessa tabela, sem usar RETURNING id
na inserção. Parece haver uma função CURRVAL()
, mas não entendo como usá-la.
Eu tentei com:
SELECT CURRVAL() AS id FROM names_id_seq
SELECT CURRVAL('names_id_seq')
SELECT CURRVAL('names_id_seq'::regclass)
mas nenhum deles funciona. Como posso usar currval()
para obter o último id inserido?
Se eu tiver uma tabela com as colunas:
id | name | created_date
e gostaria de adicionar uma coluna, eu uso:
alter table my_table add column email varchar(255)
Em seguida, a coluna é adicionada após a created_date
coluna.
Existe alguma maneira de especificar a posição da nova coluna? por exemplo, para que eu possa adicioná-lo depois name
e obter uma tabela como:
id | name | email | created_date
Eu gostaria de comparar algumas consultas SQL com meu banco de dados PostgreSQL. Existe alguma maneira de cronometrar consultas SQL usando psql
?
Gostaria de inserir um endereço IP em uma coluna que tenha o tipo inet
. Em que formato posso inserir os dados? é apenas binário ou existe alguma maneira de inserir a partir do texto, por exemplo "192.168.1.082"
? Existem funções de ajuda para isso, para que eu possa testá-lo psql
no prompt de comando?
Instalei o PostgreSQL em um computador com Mac OS X usando o instalador de um clique . Então tento acessar o PostgreSQL usando o psql
comando, mas ele não parece estar disponível.
Recebo esta mensagem:
psql
-bash: psql: command not found
Tenho que instalar algo mais? Ou como posso configurar o PostgreSQL para poder usá-lo no meu computador?
Eu tenho uma mesa items (item_id serial, name varchar(10), item_group int)
e uma mesa items_ver (id serial, item_id int, name varchar(10), item_group int)
.
Agora eu quero inserir uma linha em items_ver
from items
. Existe alguma sintaxe SQL curta para fazer isso?
Eu tentei com:
INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item_id = 2);
mas recebo um erro de sintaxe:
ERROR: syntax error at or near "select"
LINE 1: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item...
agora tentei:
INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2;
Funcionou melhor, mas recebi um erro:
ERROR: column "item_group" is of type integer but expression is of type
character varying
LINE 1: INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2;
Isso pode ocorrer porque as colunas são definidas em uma ordem diferente nas tabelas. A ordem das colunas importa? Eu esperava que o PostgreSQL correspondesse aos nomes das colunas.
Eu tenho uma tabela no PostgreSQL onde uma coluna "vat" tem o tipo, money
mas gostaria de alterá-la decimal
.
Como eu posso fazer isso?
Eu tentei com:
alter table my_table alter column vat type decimal;
Mas recebo este erro:
ERROR: column "vat" cannot be cast to type numeric
Alguma sugestão?
Eu gostaria de usar um valor padrão para uma coluna que deve ser usada se nenhuma linha for retornada. Isso é possível no PostgreSQL? Como eu posso fazer isso? Ou existe alguma outra maneira de eu resolver isso?
Por exemplo, algo assim:
SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
E se não houver nenhuma linha org_id = 3
na tabela, quero retornar 0
.
O carimbo de data/hora do Unix é o número de segundos desde a meia-noite UTC de 1º de janeiro de 1970.
Como obtenho o timestamp unix correto do PostgreSQL?
Ao comparar com currenttimestamp.com e timestamp.1e5b.de , não recebo o tempo esperado do PostgreSQL:
Isso retorna o timestamp correto:
SELECT extract(epoch from now());
Enquanto isso não:
SELECT extract(epoch from now() at time zone 'utc');
Eu moro no fuso horário UTC +02. Qual é a maneira correta de obter o timestamp unix atual do PostgreSQL?
Isso retorna a hora e o fuso horário corretos:
SELECT now();
now
-------------------------------
2011-05-18 10:34:10.820464+02
Outra comparação:
select now(),
extract(epoch from now()),
extract(epoch from now() at time zone 'utc');
now | date_part | date_part
-------------------------------+------------------+------------------
2011-05-18 10:38:16.439332+02 | 1305707896.43933 | 1305700696.43933
(1 row)
Unix timestamp from the web sites:
1305707967
Tenho uma coluna "criada" com tipo timestamp without time zone default now()
em um banco de dados PostgreSQL.
Se eu selecionar colums, ele terá um formato agradável e legível por padrão:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Mas eu gostaria de obter o timestamp em apenas milissegundos (como um Long). Algo assim:
SELECT meuformato(criado) FROM minhatabela;
created
-----------------
2432432343876944
Como posso obter a coluna timestamp em apenas milissegundos do PostgreSQL?
Resposta a Jaque:
Eu recebo a mesma diferença que você (-3600), mas se eu usar timestamp with time zone
posso ver que o "erro" ou diferença é porque '1970-01-01' obtém fuso horário +01
.
create table my_table_2(created timestamp with time zone);
CREATE TABLE
insert into my_table_2 (created) values (now()), ('1970-01-01');
INSERT 0 2
select created, extract(epoch from created) from my_table_2;
created | date_part
-------------------------------+------------------
2011-05-18 11:03:16.909338+02 | 1305709396.90934
1970-01-01 00:00:00+01 | -3600
(2 rows)
A diferença é um bug? Eu posso ser por causa do "horário de verão" no momento?
Também interessante ao usar to_timestamp()
para inserir timestamp 0 e 1.
insert into my_table_2 (created) values (to_timestamp(0));
INSERT 0 1
insert into my_table_2 (created) values (to_timestamp(1));
INSERT 0 1
select created, extract(epoch from created) from my_table_2;
created | date_part
-------------------------------+------------------
2011-05-18 11:03:16.909338+02 | 1305709396.90934
1970-01-01 00:00:00+01 | -3600
1970-01-01 01:00:00+01 | 0
1970-01-01 01:00:01+01 | 1
Estou usando o Ubuntu Server 10.10 e instalei o PostgreSQL 8.4 usando o apt-get install postgresql
. Eu gostaria de usar a sha1()
função interna, mas parece que tenho que instalar pgcrypto
primeiro. Mas não sei como instalar.
Não há pgcrypto
se eu tentar instalá-lo usando apt-get install pgcrypto
e não encontrar nenhum arquivo começando com pgcrypto
no meu sistema (tentei find / -name "pgcrypto*"
).
Como instalo o pgcrypto para poder usar a digest('word-to-hash','sha1')
função em minhas consultas ao banco de dados?
Atualização: estou lutando para instalar o pgcrypto em outra máquina Ubuntu. Depois de instalar o pacote usando sudo apt-get install postgresql-contrib-8.4
como faço para instalá-lo no meu banco de dados PostgreSQL atual?
Estou tentando aprender a administração do PostgreSQL e comecei a aprender a usar a psql
ferramenta de linha de comando.
Quando faço login com psql --username=postgres
, como listo todos os bancos de dados e tabelas?
Já tentei \d
e d
não dS+
consta nada. Eu criei dois bancos de dados e algumas tabelas com o pgAdmin III, então eu sei que eles devem ser listados.
Comecei a aprender o pgAdmin III para gerenciar um banco de dados PostgreSQL. Mas não era um aplicativo fácil de usar.
Se eu criar ou tiver criado uma tabela com o pgAdmin III, como posso adicionar a funcionalidade "incremento automático" em um id de coluna que tem o tipo integer?
Estou trabalhando com um banco de dados Apache Derby/JavaDB via JDBC. Antes eu trabalhava com MySQL e usava o phpMyAdmin como uma boa ferramenta de gerenciamento de banco de dados.
Existe algum bom aplicativo de desktop para gerenciar bancos de dados em JDBC?